sopel-github


Namesopel-github JSON
Version 0.5.0 PyPI version JSON
download
home_pageNone
SummaryGitHub plugin for Sopel
upload_time2024-08-23 15:52:55
maintainerNone
docs_urlNone
authorNone
requires_python<4,>=3.8
licenseEFL-2.0
keywords sopel plugin bot irc
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # sopel-github

GitHub plugin for [Sopel](https://sopel.chat/) IRC bots.


## Installation

`sopel-github` is hosted on PyPI, and all you need to install it is `pip`:

```sh
pip install sopel-github
```

### Requirements

`sopel-github` requires Sopel 8.0+ running on Python 3.8 or higher.

If you need to use this plugin on an older version of Sopel, [the older
`sopel_modules.github` package][namespace-package] might work, but it is no
longer updated.

[namespace-package]: https://pypi.org/project/sopel_modules.github/

#### Optional features

References to `:named_emoji:` in titles & comments can be converted to Unicode
in the output. If you want this feature, install the plugin's `emojize` extra:

```sh
pip install sopel-github[emojize]
```

_**Note:** GitHub also supports some non-standard emoji names such as `:shipit:`
that don't have a Unicode equivalent, so you might still see some
`:named_emoji:` in the plugin's output._

## Out-of-the-box Functionality

Detects when GitHub URLs are posted and takes over URL handling of them, pretty
printing details of:

 * Commits
 * Issues
 * Issue Comments
 * Pull Requests
 * Pull Request Comments
 * Repositories

Also pretty prints repository details on command, using either `.gh user/repo`
or `.github user/repo`. If you omit the user, it will assume your IRC nick is
the user. For example:

```
<@maxpowa> .gh sopel-github
<Sopel> [GitHub] maxpowa/sopel-github - GitHub module for Sopel | 100.0% Python
        | Last Push: 2015-10-16 - 04:00:32UTC | Stargazers: 0 | Watchers: 0 |
        Forks: 0 | Network: 8 | Open Issues: 0 |
        https://github.com/maxpowa/sopel-github

<+salty> .gh sopel-irc/sopel-github
<Sopel> [GitHub] sopel-irc/sopel-github - GitHub module for Sopel | 100.0%
        Python | Last Push: Sunday, May 12, 2019 17:05:43 (CDT) | Stargazers: 3
        | Watchers: 1 | Forks: 8 | Network: 8 | Open Issues: 18 |
        https://github.com/sopel-irc/sopel-github
```

### Nuisance reduction

This plugin looks for bare references to issues/PRs the same way GitHub does in
comments. If the current channel is associated with a repo, the minimum valid
reference is e.g. `#1`, which is often unhelpful. Anecdotally, chat users talk
about their number-one (or two, or three) favorite _something_ much more often
than they reference the project's very oldest issues.

For this reason, `sopel-github` ignores any single-digit bare references by
default. Your installation can use the `shortest_bare_number` setting in the
`[github]` config section to set a different minimum length.

### API Keys & Usage

GitHub's API has some fairly lenient unauthorized request limits, but you may
find yourself hitting them. In order to prevent yourself from hitting these
limits (and potentially being blacklisted), you should generate GitHub API
keys for yourself. Fill out the information at
https://github.com/settings/applications/new and then populate your
configuration with your newly generated client key and secret.

**IF YOU PLAN ON USING WEBHOOK FUNCTIONALITY:** You _must_ properly fill out
the "Authorization callback URL" to match the external URL you plan to use for
the webhook.


## Webhook Functionality

Webhook functionality is **disabled** by default. It requires slightly more
technical knowledge and configuration may vary depending on your system.

### Configuring Webhooks

There are two possible ways to set this up: behind a proxy or directly exposed
to the web.

#### Configuring behind a proxy

This is the **recommended** way of configuring the webhook functionality, as
there may be security flaws in the other method.

First, configure the GitHub module. You may do so by running `sopel
--configure-modules` or changing the config file directly.

```
[github]
webhook = True
webhook_host = 127.0.0.1
webhook_port = 3333
external_url = http://bad.code.brought.to.you.by.maxpowa.us/webhook
```

The above configuration is only listening on `localhost (127.0.0.1)`, because
I'm using a reverse proxy in nginx to proxy `/webhook` to port 3333. The
reverse proxy configuration would be fairly simple, as shown below. `/auth`
must be included to match the "Authorization callback URL" you set when
generating the API keys.

```
location ~ /(webhook|auth) {
    proxy_pass http://127.0.0.1:3333;
}
```

#### Configuring exposed to the web

If you're not using a proxy, your config will look something like this:

```
[github]
webhook = True
webhook_host = 0.0.0.0  # Or a specific interface
webhook_port = 3333
external_url = http://your.ip.here:3333/webhook
```

### Creating hooks

As an OP+ in a channel, you may type `.gh-hook user/repo`. You will see some
informational text on what you need to do to finalize the hook, including a
link to click to authorize the creation of the webhook. You will be required
to authorize the GitHub application to read/write your webhooks (see
[L170-171](https://github.com/sopel-irc/sopel-github/blob/a60b2dd2dbfc0f82926e33f00a8b0e8cc1facfb5/sopel_github/webhook.py#L170-L171))
but this should be the _only_ extra permission we need.

```
<@maxpowa> .gh-hook maxpowa/sopel-github
<Sopel> Successfully enabled listening for maxpowa/sopel-github's events in
        #inumuta.
<Sopel> Great! Please allow me to create my webhook by authorizing via this
        link: <git.io link>
<Sopel> Once that webhook is successfully created, I'll post a message in here.
        Give me about a minute or so to set it up after you authorize. You can
        configure the colors that I use to display webhooks with .gh-hook-color
```

After you've authorized the webhook creation, you will be redirected to a
simple page informing you that the bot succeeded/failed creating your hook.
Assuming it succeeded, you should see a generic message appear in the channel
you activated it in.

### Customizing hooks

You may customize the colors that each part of the hook takes on. After setting
the new colors, Sopel will reply with a sample of the new colors, e.g.:
```
<@maxpowa> .help gh-hook-color
<Sopel> .gh-hook-color <repo> <repo color> <name color> <branch color> <tag color> <hash color> <url color>

<@maxpowa> .gh-hook-color maxpowa/Inumuta 13 15 6 6 14 2
<Sopel> [maxpowa/inumuta] Example name: maxpowa tag: tag commit: c0mm17 branch: master url: http://git.io/
<@maxpowa> Unfortunately, IRC colors don't show up on GitHub.
```

## Changelog

### 0.5.0

This is the first release named `sopel-github`. Previous versions of this plugin
were known as `sopel_modules.github`, and are still available from PyPI for
users running Sopel 7.x or older.

Added:
* Support for inline references to issues/PRs from _any_ repo (#125)
* Timestamps in issue, PR, and comment output (#126)
* Configurable skipping of short inline issue/PR numbers (#137)
  * This is to help bot owners deal with e.g. people talking about their `#1`
    _something_ and the bot posts your project's first issue.

Changed:
* Modernized for newer Sopel versions (#110, #138)
* Send version header to GitHub API (#122)
* Reworked PR merge status lookup (#123)

Fixed:
* Handle directory links, not just files (#134)
* Suppress errors for invalid inline issue references (#136)

Removed:
* Obsolete `secret` setting (#124)

Meta:
* New package name, `sopel-github` (#138)
* Sopel 8.0+ now required (#138)
* Made optional `:emoji_name:` conversion a setuptools extra (#120, #140)
  * Install `sopel-github[emojize]` to enable this feature.


### 0.4.8

Changed:
* Use `emoji` 2.0 API style (#119)
  * If you installed the `emoji` package and its version is <1.7.0, you will
    need to `pip install --upgrade emoji`.
  * A future version of sopel-github will make this optional dependency easier
    to manage with a setuptools extra.

Fixed:
* Wrong webhook payload attributes used in push handler (#117)


### 0.4.7

Added:
* Special `.gh-repo !clear` syntax to delete a channel's linked repo (#112)
* Output relative committer & author date for commit URLs (#114)

Changed:
* Prettified `.gh-repo` output (#112)

Fixed:
* `NameError` in `.gh version` subcommand ( #111)
* `TypeError` in `.gh-repo` in channel with no linked repository (#112)
* Incorrect plural "1 changes" in commit output (#113)
* Reduced false-positive Markdown heading detection (#115)
* Ignore URI fragments in repo links (#116)


### 0.4.6

Changed:
* No longer attempt to shorten links with shut-down git.io (#106)

Fixed:
* Fix some edge cases in excerpted comment bodies (#105)
* Clean up some output-formatting code (#107)


### 0.4.5

Fixed:
* Link matching did not allow for underscore (`_`) in repo names (#100)


### 0.4.4

Fixed:
* Regression in handling inline/standalone issue references (#99)


### 0.4.3

Changed:
* Skip trying to handle non-repo links, e.g. to topics (#97)

Fixed:
* Issue comment handling tries to access state (#95)
* Error in cases where issue/PR body is empty (#98)


### 0.4.2

Added:
* Include issue/PR state when fetching info (#87)

Changed:
* Link shortening failures will be logged for debugging (#88)


### 0.4.1

Added:
* Include link to issue/PR in output when triggered by bare numeric reference
  in chat (#85)

Fixed:
* Double space in output of "self-assigned" webhook events (#80)


### 0.4.0

Added:
* Optionally treat references like `#123` in chat as issue references,
  configurable per-channel with new `.gh-repo` command (#65)
* Webhook handling for issue transfer events (#75)
* Rudimentary handling for links to files (#76)
  * Will try to show a useful text snippet if link points to a line/range
* Webhook handling for PR converted from Ready to Draft (#77)

Changed:
* PR output includes more details (#69)
  * Author's name added if merged PR was not created by the merging user
  * Repo owner's name added to refs if PR head branch is in a fork
* Commit references in webhook output will be abbreviated in most cases (#78)
* Include title in assignee, label, & milestone webhook output (#79)

Fixed:
* Skip label-related events that do not include the label object (#66)
  * Avoids channel spam when deleting a label, for example
* Correct fallback behavior for `.gh` command with no argument (#68)
* Avoid "Socket already in use" error when IRC reconnects (#72)


### 0.3.2

Fixed:
* Unhandled exception on linked issue/PR with empty description (#67)


### 0.3.1

Fixed:
* Use of deprecated method `bot.msg()` (#63)
* Use of deprecated `bot.privileges` property (#64)


### 0.3.0

Changed:
* Require Sopel 7.x and use its features (#58, #61)
* Ignore lines that look like (HTML) comments or headings when shortening
  comment bodies (#57)
* Deprecated query string API authentication replaced by HTTP Basic Auth (#62)

Fixed:
* Handle missing user information in commit data (#59)


### 0.2.6

Fixed:
* Syntax error in webhook code


### 0.2.5

Added:
* Error handler in webhook authorization (#51)

Fixed:
* Wrong config value access in webhook authorization (#51)


### 0.2.4

Fixed:
* Comments with trailing whitespace incorrectly had `[…]` appended even if the
  body contained only one line of (non-quoted) text (#50)


### 0.2.3

Changed:
* Milestone name is now included in `demilestoned` webhook events (#46)
  * GitHub originally didn't include this information in the webhook payload,
    but started sending it in approximately late-summer 2019

Fixed:
* Comments that were not truncated would still have `[…]` appended if the
  comment body included quoted text (#47)


### 0.2.2

Changed:
* Comment bodies will be shortened to approx. 250 characters, to try and stay
  within the length limit of one IRC line (#45)

Fixed:
* Repo URLs can be detected even with leading text on the line (#44)


### 0.2.1

Fixed:
* Comments containing blank lines would cause errors (#43)


### 0.2.0

Added:
* Handling for several new event types:
  * Pull request reviews (#20)
  * Pull request assignments (#23)
  * Pull request labels (#23)
  * Pull request milestones (#35)
  * Issue & pull request title edits (#36)
  * Releases (#21)
* Handling of draft pull requests (#34)
* Handling for draft pull requests marked ready for review (#34)
* Converting `:emoji:` to Unicode emoji in most text output (#17)
  * Requires optional dependency: https://pypi.org/project/emoji/

Changed:
* `secret` setting is now called `client_secret` (#42)
  * The plugin will automatically migrate configs to use the new name, but
    manual editing is encouraged in advanced setups (e.g. if the user Sopel
    runs as cannot write to the config file)
* Quoted text is ignored when generating comment output (#41)
* Unicode ellipsis now used instead of three periods (#31)
* Oxford comma now used in generated lists (#40)
* Webhook payload processing is handed off to a separate thread (#22)
  * Bottle can handle only one request at a time; doing this should minimize
    the potential for failed deliveries, as GitHub's webhook delivery service
    times out very quickly

Fixed:
* GitHub URL regexes should match all possible usernames & repo names (#38)
  * Of particular note: dots (`.`) are now recognized in repository links,
    such as Sopel's website repo: https://github.com/sopel-irc/sopel.chat


### 0.1.7

Fixed:
* Error with empty issue/PR description or commit message (#39)


### 0.1.6

Changed:
* Webhook now says "merged" instead of "closed" for merged PRs (#18)
* Re-opened issues/PRs will also trigger the webhook now (#27)

Fixed:
* Webhook ignores issue, PR, and review comments that were edited (#16, #24)
* Commit summary correctly says "1 file" instead of "1 files" (#37)
* Some webhook output grammar fixed (#15)
* Handle comments submitted via email correctly WRT line-endings (#30)
* Replace uses of long-deprecated `SopelMemory` method (#33)


### 0.1.5

Fixed:
* Refactoring unintentionally broke registering new repo webhooks (#14)

Meta:
* PyPI package description should be rendered to HTML now (fixed content-type)


### 0.1.4

Changed:
* "GitHub" is now properly capitalized everywhere in text output (#9)
* Usage output uses `help_prefix` from config instead of hardcoded `.` (#12)

Fixed:
* git.io shortening was cutting off GET parameters of input links. (#11)


### 0.1.3

Meta:
* Moved to Sopel organization on GitHub; new maintainer

Changed:
* Uses requests instead of deprecated sopel.web functions (Sopel itself
  requires requests, so we don't have to.)
* Fetched git.io links use HTTPS now

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "sopel-github",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4,>=3.8",
    "maintainer_email": "dgw <dgw@technobabbl.es>",
    "keywords": "sopel, plugin, bot, irc",
    "author": null,
    "author_email": "Max Gurela <maxpowa@outlook.com>",
    "download_url": "https://files.pythonhosted.org/packages/11/9a/f4a0c86ce34b37e3b020dd9da2d868e7d029a98b8bcb8569aed4dc77da89/sopel_github-0.5.0.tar.gz",
    "platform": "Linux x86, x86-64",
    "description": "# sopel-github\n\nGitHub plugin for [Sopel](https://sopel.chat/) IRC bots.\n\n\n## Installation\n\n`sopel-github` is hosted on PyPI, and all you need to install it is `pip`:\n\n```sh\npip install sopel-github\n```\n\n### Requirements\n\n`sopel-github` requires Sopel 8.0+ running on Python 3.8 or higher.\n\nIf you need to use this plugin on an older version of Sopel, [the older\n`sopel_modules.github` package][namespace-package] might work, but it is no\nlonger updated.\n\n[namespace-package]: https://pypi.org/project/sopel_modules.github/\n\n#### Optional features\n\nReferences to `:named_emoji:` in titles & comments can be converted to Unicode\nin the output. If you want this feature, install the plugin's `emojize` extra:\n\n```sh\npip install sopel-github[emojize]\n```\n\n_**Note:** GitHub also supports some non-standard emoji names such as `:shipit:`\nthat don't have a Unicode equivalent, so you might still see some\n`:named_emoji:` in the plugin's output._\n\n## Out-of-the-box Functionality\n\nDetects when GitHub URLs are posted and takes over URL handling of them, pretty\nprinting details of:\n\n * Commits\n * Issues\n * Issue Comments\n * Pull Requests\n * Pull Request Comments\n * Repositories\n\nAlso pretty prints repository details on command, using either `.gh user/repo`\nor `.github user/repo`. If you omit the user, it will assume your IRC nick is\nthe user. For example:\n\n```\n<@maxpowa> .gh sopel-github\n<Sopel> [GitHub] maxpowa/sopel-github - GitHub module for Sopel | 100.0% Python\n        | Last Push: 2015-10-16 - 04:00:32UTC | Stargazers: 0 | Watchers: 0 |\n        Forks: 0 | Network: 8 | Open Issues: 0 |\n        https://github.com/maxpowa/sopel-github\n\n<+salty> .gh sopel-irc/sopel-github\n<Sopel> [GitHub] sopel-irc/sopel-github - GitHub module for Sopel | 100.0%\n        Python | Last Push: Sunday, May 12, 2019 17:05:43 (CDT) | Stargazers: 3\n        | Watchers: 1 | Forks: 8 | Network: 8 | Open Issues: 18 |\n        https://github.com/sopel-irc/sopel-github\n```\n\n### Nuisance reduction\n\nThis plugin looks for bare references to issues/PRs the same way GitHub does in\ncomments. If the current channel is associated with a repo, the minimum valid\nreference is e.g. `#1`, which is often unhelpful. Anecdotally, chat users talk\nabout their number-one (or two, or three) favorite _something_ much more often\nthan they reference the project's very oldest issues.\n\nFor this reason, `sopel-github` ignores any single-digit bare references by\ndefault. Your installation can use the `shortest_bare_number` setting in the\n`[github]` config section to set a different minimum length.\n\n### API Keys & Usage\n\nGitHub's API has some fairly lenient unauthorized request limits, but you may\nfind yourself hitting them. In order to prevent yourself from hitting these\nlimits (and potentially being blacklisted), you should generate GitHub API\nkeys for yourself. Fill out the information at\nhttps://github.com/settings/applications/new and then populate your\nconfiguration with your newly generated client key and secret.\n\n**IF YOU PLAN ON USING WEBHOOK FUNCTIONALITY:** You _must_ properly fill out\nthe \"Authorization callback URL\" to match the external URL you plan to use for\nthe webhook.\n\n\n## Webhook Functionality\n\nWebhook functionality is **disabled** by default. It requires slightly more\ntechnical knowledge and configuration may vary depending on your system.\n\n### Configuring Webhooks\n\nThere are two possible ways to set this up: behind a proxy or directly exposed\nto the web.\n\n#### Configuring behind a proxy\n\nThis is the **recommended** way of configuring the webhook functionality, as\nthere may be security flaws in the other method.\n\nFirst, configure the GitHub module. You may do so by running `sopel\n--configure-modules` or changing the config file directly.\n\n```\n[github]\nwebhook = True\nwebhook_host = 127.0.0.1\nwebhook_port = 3333\nexternal_url = http://bad.code.brought.to.you.by.maxpowa.us/webhook\n```\n\nThe above configuration is only listening on `localhost (127.0.0.1)`, because\nI'm using a reverse proxy in nginx to proxy `/webhook` to port 3333. The\nreverse proxy configuration would be fairly simple, as shown below. `/auth`\nmust be included to match the \"Authorization callback URL\" you set when\ngenerating the API keys.\n\n```\nlocation ~ /(webhook|auth) {\n    proxy_pass http://127.0.0.1:3333;\n}\n```\n\n#### Configuring exposed to the web\n\nIf you're not using a proxy, your config will look something like this:\n\n```\n[github]\nwebhook = True\nwebhook_host = 0.0.0.0  # Or a specific interface\nwebhook_port = 3333\nexternal_url = http://your.ip.here:3333/webhook\n```\n\n### Creating hooks\n\nAs an OP+ in a channel, you may type `.gh-hook user/repo`. You will see some\ninformational text on what you need to do to finalize the hook, including a\nlink to click to authorize the creation of the webhook. You will be required\nto authorize the GitHub application to read/write your webhooks (see\n[L170-171](https://github.com/sopel-irc/sopel-github/blob/a60b2dd2dbfc0f82926e33f00a8b0e8cc1facfb5/sopel_github/webhook.py#L170-L171))\nbut this should be the _only_ extra permission we need.\n\n```\n<@maxpowa> .gh-hook maxpowa/sopel-github\n<Sopel> Successfully enabled listening for maxpowa/sopel-github's events in\n        #inumuta.\n<Sopel> Great! Please allow me to create my webhook by authorizing via this\n        link: <git.io link>\n<Sopel> Once that webhook is successfully created, I'll post a message in here.\n        Give me about a minute or so to set it up after you authorize. You can\n        configure the colors that I use to display webhooks with .gh-hook-color\n```\n\nAfter you've authorized the webhook creation, you will be redirected to a\nsimple page informing you that the bot succeeded/failed creating your hook.\nAssuming it succeeded, you should see a generic message appear in the channel\nyou activated it in.\n\n### Customizing hooks\n\nYou may customize the colors that each part of the hook takes on. After setting\nthe new colors, Sopel will reply with a sample of the new colors, e.g.:\n```\n<@maxpowa> .help gh-hook-color\n<Sopel> .gh-hook-color <repo> <repo color> <name color> <branch color> <tag color> <hash color> <url color>\n\n<@maxpowa> .gh-hook-color maxpowa/Inumuta 13 15 6 6 14 2\n<Sopel> [maxpowa/inumuta] Example name: maxpowa tag: tag commit: c0mm17 branch: master url: http://git.io/\n<@maxpowa> Unfortunately, IRC colors don't show up on GitHub.\n```\n\n## Changelog\n\n### 0.5.0\n\nThis is the first release named `sopel-github`. Previous versions of this plugin\nwere known as `sopel_modules.github`, and are still available from PyPI for\nusers running Sopel 7.x or older.\n\nAdded:\n* Support for inline references to issues/PRs from _any_ repo (#125)\n* Timestamps in issue, PR, and comment output (#126)\n* Configurable skipping of short inline issue/PR numbers (#137)\n  * This is to help bot owners deal with e.g. people talking about their `#1`\n    _something_ and the bot posts your project's first issue.\n\nChanged:\n* Modernized for newer Sopel versions (#110, #138)\n* Send version header to GitHub API (#122)\n* Reworked PR merge status lookup (#123)\n\nFixed:\n* Handle directory links, not just files (#134)\n* Suppress errors for invalid inline issue references (#136)\n\nRemoved:\n* Obsolete `secret` setting (#124)\n\nMeta:\n* New package name, `sopel-github` (#138)\n* Sopel 8.0+ now required (#138)\n* Made optional `:emoji_name:` conversion a setuptools extra (#120, #140)\n  * Install `sopel-github[emojize]` to enable this feature.\n\n\n### 0.4.8\n\nChanged:\n* Use `emoji` 2.0 API style (#119)\n  * If you installed the `emoji` package and its version is <1.7.0, you will\n    need to `pip install --upgrade emoji`.\n  * A future version of sopel-github will make this optional dependency easier\n    to manage with a setuptools extra.\n\nFixed:\n* Wrong webhook payload attributes used in push handler (#117)\n\n\n### 0.4.7\n\nAdded:\n* Special `.gh-repo !clear` syntax to delete a channel's linked repo (#112)\n* Output relative committer & author date for commit URLs (#114)\n\nChanged:\n* Prettified `.gh-repo` output (#112)\n\nFixed:\n* `NameError` in `.gh version` subcommand ( #111)\n* `TypeError` in `.gh-repo` in channel with no linked repository (#112)\n* Incorrect plural \"1 changes\" in commit output (#113)\n* Reduced false-positive Markdown heading detection (#115)\n* Ignore URI fragments in repo links (#116)\n\n\n### 0.4.6\n\nChanged:\n* No longer attempt to shorten links with shut-down git.io (#106)\n\nFixed:\n* Fix some edge cases in excerpted comment bodies (#105)\n* Clean up some output-formatting code (#107)\n\n\n### 0.4.5\n\nFixed:\n* Link matching did not allow for underscore (`_`) in repo names (#100)\n\n\n### 0.4.4\n\nFixed:\n* Regression in handling inline/standalone issue references (#99)\n\n\n### 0.4.3\n\nChanged:\n* Skip trying to handle non-repo links, e.g. to topics (#97)\n\nFixed:\n* Issue comment handling tries to access state (#95)\n* Error in cases where issue/PR body is empty (#98)\n\n\n### 0.4.2\n\nAdded:\n* Include issue/PR state when fetching info (#87)\n\nChanged:\n* Link shortening failures will be logged for debugging (#88)\n\n\n### 0.4.1\n\nAdded:\n* Include link to issue/PR in output when triggered by bare numeric reference\n  in chat (#85)\n\nFixed:\n* Double space in output of \"self-assigned\" webhook events (#80)\n\n\n### 0.4.0\n\nAdded:\n* Optionally treat references like `#123` in chat as issue references,\n  configurable per-channel with new `.gh-repo` command (#65)\n* Webhook handling for issue transfer events (#75)\n* Rudimentary handling for links to files (#76)\n  * Will try to show a useful text snippet if link points to a line/range\n* Webhook handling for PR converted from Ready to Draft (#77)\n\nChanged:\n* PR output includes more details (#69)\n  * Author's name added if merged PR was not created by the merging user\n  * Repo owner's name added to refs if PR head branch is in a fork\n* Commit references in webhook output will be abbreviated in most cases (#78)\n* Include title in assignee, label, & milestone webhook output (#79)\n\nFixed:\n* Skip label-related events that do not include the label object (#66)\n  * Avoids channel spam when deleting a label, for example\n* Correct fallback behavior for `.gh` command with no argument (#68)\n* Avoid \"Socket already in use\" error when IRC reconnects (#72)\n\n\n### 0.3.2\n\nFixed:\n* Unhandled exception on linked issue/PR with empty description (#67)\n\n\n### 0.3.1\n\nFixed:\n* Use of deprecated method `bot.msg()` (#63)\n* Use of deprecated `bot.privileges` property (#64)\n\n\n### 0.3.0\n\nChanged:\n* Require Sopel 7.x and use its features (#58, #61)\n* Ignore lines that look like (HTML) comments or headings when shortening\n  comment bodies (#57)\n* Deprecated query string API authentication replaced by HTTP Basic Auth (#62)\n\nFixed:\n* Handle missing user information in commit data (#59)\n\n\n### 0.2.6\n\nFixed:\n* Syntax error in webhook code\n\n\n### 0.2.5\n\nAdded:\n* Error handler in webhook authorization (#51)\n\nFixed:\n* Wrong config value access in webhook authorization (#51)\n\n\n### 0.2.4\n\nFixed:\n* Comments with trailing whitespace incorrectly had `[\u2026]` appended even if the\n  body contained only one line of (non-quoted) text (#50)\n\n\n### 0.2.3\n\nChanged:\n* Milestone name is now included in `demilestoned` webhook events (#46)\n  * GitHub originally didn't include this information in the webhook payload,\n    but started sending it in approximately late-summer 2019\n\nFixed:\n* Comments that were not truncated would still have `[\u2026]` appended if the\n  comment body included quoted text (#47)\n\n\n### 0.2.2\n\nChanged:\n* Comment bodies will be shortened to approx. 250 characters, to try and stay\n  within the length limit of one IRC line (#45)\n\nFixed:\n* Repo URLs can be detected even with leading text on the line (#44)\n\n\n### 0.2.1\n\nFixed:\n* Comments containing blank lines would cause errors (#43)\n\n\n### 0.2.0\n\nAdded:\n* Handling for several new event types:\n  * Pull request reviews (#20)\n  * Pull request assignments (#23)\n  * Pull request labels (#23)\n  * Pull request milestones (#35)\n  * Issue & pull request title edits (#36)\n  * Releases (#21)\n* Handling of draft pull requests (#34)\n* Handling for draft pull requests marked ready for review (#34)\n* Converting `:emoji:` to Unicode emoji in most text output (#17)\n  * Requires optional dependency: https://pypi.org/project/emoji/\n\nChanged:\n* `secret` setting is now called `client_secret` (#42)\n  * The plugin will automatically migrate configs to use the new name, but\n    manual editing is encouraged in advanced setups (e.g. if the user Sopel\n    runs as cannot write to the config file)\n* Quoted text is ignored when generating comment output (#41)\n* Unicode ellipsis now used instead of three periods (#31)\n* Oxford comma now used in generated lists (#40)\n* Webhook payload processing is handed off to a separate thread (#22)\n  * Bottle can handle only one request at a time; doing this should minimize\n    the potential for failed deliveries, as GitHub's webhook delivery service\n    times out very quickly\n\nFixed:\n* GitHub URL regexes should match all possible usernames & repo names (#38)\n  * Of particular note: dots (`.`) are now recognized in repository links,\n    such as Sopel's website repo: https://github.com/sopel-irc/sopel.chat\n\n\n### 0.1.7\n\nFixed:\n* Error with empty issue/PR description or commit message (#39)\n\n\n### 0.1.6\n\nChanged:\n* Webhook now says \"merged\" instead of \"closed\" for merged PRs (#18)\n* Re-opened issues/PRs will also trigger the webhook now (#27)\n\nFixed:\n* Webhook ignores issue, PR, and review comments that were edited (#16, #24)\n* Commit summary correctly says \"1 file\" instead of \"1 files\" (#37)\n* Some webhook output grammar fixed (#15)\n* Handle comments submitted via email correctly WRT line-endings (#30)\n* Replace uses of long-deprecated `SopelMemory` method (#33)\n\n\n### 0.1.5\n\nFixed:\n* Refactoring unintentionally broke registering new repo webhooks (#14)\n\nMeta:\n* PyPI package description should be rendered to HTML now (fixed content-type)\n\n\n### 0.1.4\n\nChanged:\n* \"GitHub\" is now properly capitalized everywhere in text output (#9)\n* Usage output uses `help_prefix` from config instead of hardcoded `.` (#12)\n\nFixed:\n* git.io shortening was cutting off GET parameters of input links. (#11)\n\n\n### 0.1.3\n\nMeta:\n* Moved to Sopel organization on GitHub; new maintainer\n\nChanged:\n* Uses requests instead of deprecated sopel.web functions (Sopel itself\n  requires requests, so we don't have to.)\n* Fetched git.io links use HTTPS now\n",
    "bugtrack_url": null,
    "license": "EFL-2.0",
    "summary": "GitHub plugin for Sopel",
    "version": "0.5.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/sopel-irc/sopel-github/issues",
        "Homepage": "https://github.com/sopel-irc/sopel-github"
    },
    "split_keywords": [
        "sopel",
        " plugin",
        " bot",
        " irc"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b87cbfba4e9df498937514c196538310990758b769fe338c28146b037ded3ac3",
                "md5": "72d2127d63444b3c3bf3c09cd1f28da9",
                "sha256": "550fb6615e58791f905c258279899245ec9ea20fb8d918803b8dac6cf898b56a"
            },
            "downloads": -1,
            "filename": "sopel_github-0.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "72d2127d63444b3c3bf3c09cd1f28da9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4,>=3.8",
            "size": 22909,
            "upload_time": "2024-08-23T15:52:54",
            "upload_time_iso_8601": "2024-08-23T15:52:54.231981Z",
            "url": "https://files.pythonhosted.org/packages/b8/7c/bfba4e9df498937514c196538310990758b769fe338c28146b037ded3ac3/sopel_github-0.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "119af4a0c86ce34b37e3b020dd9da2d868e7d029a98b8bcb8569aed4dc77da89",
                "md5": "333b5126c4a38305538d90156f42a3ea",
                "sha256": "79e8aa2b405aa28ae46519098586cc9675b7ee5130762cedc891e3b9e20e7c78"
            },
            "downloads": -1,
            "filename": "sopel_github-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "333b5126c4a38305538d90156f42a3ea",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4,>=3.8",
            "size": 27919,
            "upload_time": "2024-08-23T15:52:55",
            "upload_time_iso_8601": "2024-08-23T15:52:55.518611Z",
            "url": "https://files.pythonhosted.org/packages/11/9a/f4a0c86ce34b37e3b020dd9da2d868e7d029a98b8bcb8569aed4dc77da89/sopel_github-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-23 15:52:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sopel-irc",
    "github_project": "sopel-github",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "sopel-github"
}
        
Elapsed time: 0.35181s