bitbot-3.11-fork/CHANGELOG.md

597 lines
25 KiB
Markdown
Raw Normal View History

2020-08-26 10:23:34 +00:00
# TBD - BitBot v1.20.0
Added:
- `ban-enforce.py` to kick people that match a new ban mask
- MLOCK-like functionality in `channel_op.py`
- Channels can be opted out of inactivity pruning
- Optional to disable youtubeifying `!np` output
- Allow RSS requests to bind to specific source addresses
- `!words` in PM
- `yourls.py` for yourl url shortners
- handle `RPL_VISIBLEHOST`
Changed:
- `ERR_LINKCHANNEL` (470) now removes the initial channel from autojoin
- (IRCv3) `+draft/typing` was ratified
- We're no longer supporting a specific broken charybdis install, for line length calculations
- Much better line truncation
- Handle HTTP redirects ourselves, to avoid redirects on to forbidden hosts
Fixed:
- All bot.conf paths should have ~/{DATA} expanded
- `host-meta` URL for fediverse accounts should be optional - fallback to default webfinger
- Message filter `m/` criterias should operate on formatting-stripped lines
- Quote `!grab`s were wiping the user's category
- Quote `!quotedel`s were looking at the wrong categories
- `!words` was squashing results in to a dict, losing days
- INVEX and EXCEPT lists were looking at the wrong index for masks
2020-08-26 10:05:02 +00:00
# 2020-02-29 - BitBot v1.19.0 ("Command Specs Spark Joy")
2020-02-26 11:08:00 +00:00
Added:
- Commands Specs. expression language for defining format of command args
- `.bitbot/mod-data/` for addition data files for modules
- Concept of core vs additional modules. Core modules can be reloaded but not unloaded
- `channel_access` groups: `low`/`high`/`admin`
- Proof of concept reminders on a cron schedule (`cron_reminders.py`)
- Show how many seconds by which you missed a duck (`ducks.py`)
- Show gitlab wiki events (`git_webhooks`)
- Opt-in prune inactive channels after 2 weeks (`inactive_channels.py`)
- Ability to export decorated functions with @utils.export
- Configrable chance of randomly triggered markovs (`markov.py`)
- Ability to rewrite messages as well as block them (`message_filters.py`)
- Ability to search through recent messages (`messages.py`)
- `rainbow.py` because rainbow text is fun
- Track time/commit of load and events handled per module and show it through `!modinfo` (`modules.py`)
- Support ranges in stepped cron schedules (`cron.py`)
- Format `ACCOUNT` events (`format_activity.py`)
- Track channel list modes like ban, quiet, invex, ban exceptions (`mode_lists.py`)
- Support `WATCH` when available for `nick_regain.py`
Changed:
- IRCv3's `labeled-response` was ratified
- IRCv3's `setname` was ratified
- `channel_log` now logs to `.bitbot/mod-data/channel_log/`
- `channel_log` can now RSA+AES(CBC) encrypt log files
- Word tracking is now done per day. use `migration/v01.19.0-words.py` to migrate old data
- Totally rewrote `badges.py` command interface
- Huge refactor and rework of `channel_op.py` - most commands can take duration and globs now
- Improve `factoids.py` (including nested factoids)
- Split out `src/utils/datetime.py`
- Show github webhook issue/PR titles in more places (`git_webhooks`)
- Show google result descriptions instead of title when available (`google.py`)
- Minimal formatted lines should be relayed (`relay.py`)
- Totally rewrote `todo.py` command interface
- `IRCBuffer` now holds 1024 lines of history (was 64; 1024 might be overkill...)
- Reloaded modules will always be rolled back to previous loaded module if reload fails
- Generate usage from command spec stings when present (`help.py`)
- Much cleaner support for handling server `NOTICE`s (`line_handler`)
- `to_pretty_time` can now do relative time (e.g. including years and months)
- Souped HTTP responses changed from `lxml` parsing to `html5lib` by default
- Bool config options now accept 0 and 1
Fixed:
- Readded lost support for SASL `USERPASS` pseudo algo (`ircv3_sasl`)
- Minor typo in `healthchecks.py`
- Minor typo in `votes.py`
- Crash caused by division by zero in `title.py` difference checking
- `internal.identified` command was being fired for every message with an `@account` tag (`permissions`)
2020-01-20 16:31:15 +00:00
# 2020-01-20 - BitBot v1.18.2
Changed:
- Colourise server address in `server-notice` formatting (`format_activity.py`)
Fixed:
- `user` variable doesn't exist in `INVITE` formatting code (`format_activity.py`)
2020-02-26 13:39:52 +00:00
- `IRCBuffer.Buffer.find()`'s `not_pattern` arg should be optional
2020-01-20 16:31:15 +00:00
- `utils.datetime.iso8601_parse` no longer has a `microseconds` arg (`youtube.py`)
2020-01-20 14:00:31 +00:00
# 2020-01-20 - BitBot v1.18.1
Fixed:
- Formatting variable typo for handling TOPIC (`format_activity.py`)
2020-01-20 13:49:42 +00:00
# 2020-01-20 - BitBot v1.18.0
2020-01-08 10:42:37 +00:00
Added:
2020-01-17 16:42:29 +00:00
- New dependency in `requirements.txt`: `dateutils`
2020-01-08 10:42:37 +00:00
- Show `transferred` github issues by default (`git_webhooks`)
- `hostmask-tracking.py` - keep a history of what hostmasks each nickname has used
- Also watch `NICK` and `QUIT` lines to see when our nickname might be freee (`nick_regain.py`)
2020-01-17 16:42:29 +00:00
- IRCv3 `draft/delete` implementation (`ircv3_editmsg.py`)
2020-01-20 13:49:26 +00:00
- Show account and realname in `JOIN` formattin when available (`format_activity.py`)
2020-01-08 10:42:37 +00:00
Changed:
- Removed `--data-dir`, `--database` and `--log-dir`, these options have been moved to `bot.conf`
- Reworded karma change output
- `!grab` not tries to attach quote to account, not just nickname (`quotes.py`)
- `!wordiest` not defaults to the current channel (`words.py`)
2020-01-15 10:16:14 +00:00
- `!part` now works for `+o` users or users with channel_access `part` (`admin.py`)
2020-01-08 10:42:37 +00:00
Fixed:
- cron would fail to initialise at 59 minutes past the hour (`core_modules/cron.py`)
2020-01-15 10:16:14 +00:00
- Don't send typing notications by default for pattern-based commands
- Regex error when replacement starts with a number (`sed.py`)
2020-01-16 13:17:01 +00:00
- Reimplement lost IRCv3 `account-tag` functionality (`permissions`)
2020-01-17 16:42:29 +00:00
- Show username when fediverse displayname is "" (`fediverse`)
- `++asd++` used to give karma to both `asd++` and `++asd` (`karma.py`)
2020-01-08 10:42:37 +00:00
2020-01-08 10:31:06 +00:00
# 2020-01-08 - BitBot v1.17.2
Fixed:
- Incorrect format for HTTP UserAgent (missing ")")
2019-12-13 17:23:53 +00:00
# 2019-12-13 - BitBot v1.17.1
Fixed:
- Crash caused by switching `coins.py` to using `cron` scheduling without removing timer-related code
- Typo in function call name in `cron.py`
# 2019-12-13 - BitBot v1.17.0
2019-12-12 12:31:41 +00:00
Added:
- Ability to `.save()` `bot.conf` - we now use only this for module whitelist/blacklist
- A cron system (`src/core_modules/cron.py`)
- `healthcheck.py` - ping a URL every 10 minutes (for uptime-tracking services)
- Support `++nickname` style karma (`karma.py`)
- Bot-wide aliases (`!balias` in `aliases.py`)
- Support per-user (PM) `command-method` setting (`commands`)
2019-12-13 15:13:01 +00:00
- `dnsbl` module to loop up given IPv4 and IPv6 addresses in blacklists
2019-12-12 12:31:41 +00:00
Changed:
- "Core" modules (modules needed for base operation of bitbot) moved to `src/core_modules` and made blacklist-immune
- Better parsing error for `!config u birthday` (`birthday.py`)
- Show display name, not username, when available (`fediverse.py`)
- By default, show `locked`/`unlocked` github issue/PR events (`git_webhooks`)
- Switch back to full wolframalpha API but use it better than we used to (`wolframalpha.py`)
- Hostmasks are now precompiled to find users that match them (`permissions`)
Removed:
- `-m`/`-M` args to `bitbotd` - didn't work any more due to databse locking
- `database_backup.py` - this was always a weird hack. Added a note about backups in `README.md`
2019-12-01 11:16:56 +00:00
# 2019-12-01 - BitBot v1.16.1
Changed:
- Response to giving karma now makes sense
Fixed:
- Typo preventing users giving karma
2019-12-01 09:48:24 +00:00
# 2019-12-01 - BitBot v1.16.0
2019-11-20 18:19:13 +00:00
Added:
- Show target in formatted private `NOTICE` events (`format_activity.py`)
- Show first 100 chars of GitHub issue comments (`git_webhooks`)
- Show who opened a GitHub pull request when approperiate (`git_webhooks`)
- Timed user ignores (`ignore.py`)
2019-11-22 12:43:10 +00:00
- Support `"$$"` as `"$"` in command alias argument replacement (`aliases.py`)
2019-11-25 12:04:30 +00:00
- Show explicitly when only a title of an issue/PR was changed (`git_webhooks`)
2019-11-27 13:03:26 +00:00
- Show URLs in `!wikipedia` output (`wikipedia.py`)
2019-12-01 07:45:10 +00:00
- `!raw` and `!perform` now support "human" formats (e.g. `/msg user message`)
- Listing servers with `!servers` (`stats.py`)
2019-11-20 18:19:13 +00:00
Changed:
2019-11-22 12:43:10 +00:00
- Complete refactor of `permissions` module - now with hostmask support
2019-11-25 12:04:30 +00:00
- Big refactor of commands module
2019-11-20 18:19:13 +00:00
- Command aliases moved to their own module. Run `migration/v01.16.00-aliases.py` to migrate old aliases.
2019-12-01 07:45:10 +00:00
- Karma is now stored per-user and you can give yourself karma. Run `migration/v01.16.00-karma` to migrate old karma.
2019-11-20 18:19:13 +00:00
- Unique User-Agent (`utils.http.USERAGENT`)
- Nickname hashed colourisation now matches weechat's default (`utils.irc`)
2019-11-22 12:43:10 +00:00
- `./bitbotd -m permissions -M master-password` moved to `./bitbotctl command master-password`
2019-11-26 14:07:18 +00:00
- `utils.http.Response.data` is now always `bytes` - use `.decode()`/`.json()`/`.soup()`
- `to.py` -> `tell.py`; move `!to` to `!tell` but add `!to` as an alias
2019-11-27 13:03:26 +00:00
- Sed edits are now cumulative (`sed.py`)
2019-11-20 18:19:13 +00:00
2019-11-18 12:20:09 +00:00
# 2019-11-18 - BitBot v1.15.0
2019-11-14 12:16:15 +00:00
Added:
- Optionally colourise nicknames when printed to log (`format_activity.py` and `print_activity.py`)
- Show git branch in `!version` output (`info.py`)
- Stop/start REST API HTTPd when trying to reload all modules (`ModuleManager` and `rest_api.py`)
2019-11-14 17:35:40 +00:00
- Individual channels can opt out of printing to INFO log (`!config c print off`, `print_activity.py`)
2019-11-15 12:36:23 +00:00
- Opt-in shlex argument parsing for command callbacks (`commands`)
- Show when BitBot first saw you speak in `!words` output (`words.py`)
2019-11-14 12:16:15 +00:00
Changed:
2019-11-14 17:35:40 +00:00
- Logging moved to `~/.bitbot/logs/` by default
2019-11-14 12:16:15 +00:00
- Better eval API for `eval_python.py` (now py3 only)
- Better single-line normalisation for ActivityPub Activities (`fediverse`)
- Better error messages shown to user when a fediverse Actor can't be found (`fediverse`)
- Git hashes are now truncated to 7 chars, not 8 (`git_webhooks`)
2019-11-15 15:05:12 +00:00
- Split `utils/__init__.py` out in to more separate files
- Show channel mode status symbols when formatting `NOTICE`s (`format_activity.py`)
2019-11-18 11:38:11 +00:00
- Conbine YouTube API requests in to 1 request, rather than 3 (`youtube.py`)
2019-11-14 12:16:15 +00:00
Fixed:
- Multiple channel keys should be expressed as comma-separated (`channel_keys.py`)
2019-11-15 15:06:04 +00:00
- `!duckstats <nickname>` was meant to show stats for another user (`ducks.py`)
2019-11-14 12:16:15 +00:00
- Fix almost completely broken 908 (`RPL_SASLMECHS`) handling
- Background colour formatting was being lost (`utils.irc`)
Removed:
- `tfl.py` moved to `bitbot-modules`
2019-11-04 10:13:48 +00:00
# 2019-11-04 - BitBot v1.14.0
2019-10-29 18:16:40 +00:00
Added:
2019-11-01 16:11:17 +00:00
- Add Travis config to run `mypy`
2019-10-29 18:16:40 +00:00
- `!cmute`/`!cunmute` to mute/unmute a channel (`+m`) (`admin.py`)
- Support GitLab notes and confidential issues (`git_webhooks`)
- Strip `"'<>()` from words in titles when checking difference between a `<title>` and URL (`title.py`)
2019-10-30 11:56:25 +00:00
- Show when a youtube video was uploaded (`youtube.py`)
- 15 second SASL handshake timeout (`ircv3_sasl`)
- Ability to disable command suggestions (`command_suggestions.py`)
2019-10-31 16:32:29 +00:00
- Format/print/log `CHGHOST` events
2019-11-01 16:11:17 +00:00
- Show when a `!config` option has remained unchanged (`config.py`)
- Show GMT offset in `!time` output (`user_time.py`)
2019-10-29 18:16:40 +00:00
Changed:
- `/me` lines are no longer added to markov chains
2019-10-30 11:56:25 +00:00
- `!seen` last action (`seen-info`) is now per-channel, not per-network (`seen.py`)
2019-10-29 18:16:40 +00:00
Fixed:
- Rectified `src/utils/` circular dependency mess
- Decode fediverse data as utf8
2019-10-31 16:32:29 +00:00
- A bunch of typehinting errors across `src/`
- Switch to `lxml` for fediverse note parsing. `html.parser` was buggy and unpredictable (`fediverse`)
2019-10-29 18:16:40 +00:00
2019-11-04 10:13:48 +00:00
Removed:
- `!timezone`
2019-10-25 13:35:18 +00:00
# 2019-10-25 - BitBot v1.13.0
2019-10-11 16:18:29 +00:00
Added:
- `setup.py`
- `bitbotctl` - daemon control system through unix domain sockets
2019-10-17 13:19:33 +00:00
- Basic GitLab webhook support in `git_webhooks`
- Catch `m.youtube.com` URLs in `auto-youtube`
2019-10-18 10:41:37 +00:00
- Support UTF8 domains by punycode (idna) encoding
2019-10-20 16:26:37 +00:00
- `!` param in `!fedi` to denote "show content-warned content"
- Opt-in URL shortening for Gitea and GitLab
2019-10-25 13:34:56 +00:00
- `?channels=` GET param for git_webhooks to denote what channels should show activity
- `votes-cast-restricted` to restrict voting to voiced-or-above users
2019-10-11 16:18:29 +00:00
Changed:
- `start.py` -> `bitbotd`
2019-10-17 13:19:33 +00:00
- Database and config are now expected in `~/.bitbot/` (unless `--database` and `--config` are specified)
- Database backup files are now in `bot.db.{time}.back` format
2019-10-11 16:18:29 +00:00
- Don't say a users vote was changed when it wasn't (`vote.py`)
- Bot will not die when there's no connected servers
2019-10-14 14:37:56 +00:00
- Command output will be truncated/cut at "word bounaries" (currently only space)
- `!reloadallmodules` and `SIGUSR1` will not try to reload but rollback to currently-loaded on error
2019-10-25 13:34:56 +00:00
- `IRCBot.panic()` now just calls `sys.exit(20)` instead of trying to kill event loop
2019-10-11 16:18:29 +00:00
Fixed:
2019-10-18 14:25:58 +00:00
- Any user was able to add an API KEY (missing `permission` kwarg)
2019-10-11 16:18:29 +00:00
- Be able to `!disconnect` reconnection attempts (regression, `admin.py`)
2019-10-14 14:37:56 +00:00
- Strip only unknown tags from fedi `Note` activities - not the tag content too
2019-10-17 13:19:33 +00:00
- Don't allow users to `!bef`/`!trap` a triggered duck before it has quacked
- Don't set `location` to just a string when we decide a `!weather` arg is not a nickname
2019-10-25 13:34:56 +00:00
- We were not pulling out account ID from `WHOX` (just account name)
- Outdated `tornado` version in `requirements.txt`
2019-10-17 13:19:33 +00:00
Removed:
- `cve.py`
2019-10-25 13:39:31 +00:00
- `EVENTS.md`
2019-10-11 16:18:29 +00:00
2019-10-10 12:36:55 +00:00
# 2019-10-10 - BitBot v1.12.0
2019-10-10 11:43:19 +00:00
Added:
- Basic lock file mechanics (`src/LockFile.py`)
2019-10-09 11:41:50 +00:00
- `external_modules` - an arbitrary directory in which to look for modules
- `channel_blacklist.py` - rewrite `JOIN`s and send instant `PART`s to avoid the bot being in certain channels
- Ability to specify different `channel_op.py` `ban-mask` for users with accounts
- `!invite` in `channel_op.py`
- `check_certificate.py` - warn when a client certificate is close to expiration (or already expired)
- Support `$-` format for alias arg replacement - means "none or all args"
- Support `!config <nickname>`, `!config <#channel>` and `!config *`
- Support dice roll modifiers (e.g. `!roll 2d20+1-2`) in `dice.py`
- Opt-out highlight prevention for `!friends`/`!enemies` in `ducks.py`
- Use a random delay after a duck is triggered before showing the duck (`ducks.py`)
- `!friends`/`!enemies` now defaults to the current channel (`ducks.py`)
- `!action` and `!msg` in `echo.py`
- `git-show-private` channel setting to enable showing private github/gitea webhooks
- `!ghcommit` and support `auto-github` for `@commit`
- `!which` - show what module provides a command
- `!apropos` - show commands that contain a given string
- `!tcpup` - check if a given `host:port` can receive a TCP connection
- `markov.py`
- `mumble.py` - show stats for a given mumble server
- `!grab` as an alias of `!quotegrab`
- `!crate` in `rust.py` - show information on a given crate name
- Support sed `&` syntax
- Support `"<nickname>: s/"` sed syntax (search only for messages by `<nickname>`)
- `!silence` now takes an optional duration parameter
- `!unsilence`
- `!stats` not takes an optional network parameter - to show stats only for a given server
- `!channels` - list the bot's current channels on the current network
- `strip_otr.py` - remove trail whitespace used for automated OTR handshakes
- Support disabling `words.py` word tracking for a while channel
- `utils.deadline_process` - like `@utils.deadline` but uses a subprocess
2019-10-10 12:36:55 +00:00
- Single-line normalisation of fediverse Notes by vaguely parsing HTML
- Single-line normalisation of RSS titles
- Single-line normalisation of tweets
2019-10-09 11:41:50 +00:00
Changed:
- REST API only listens on localhost now, for security reasons
- `!changenickname` -> `!nick`
- `!reconnect` can take an `<alias>` param to tell it which server to reconnect to
- `!disconnect` can now cancel reconnections
- `auto_mode.py` was replaced by `!flags` in `channel_op.py`
- `!mute` masks should also take in to consideration the configured `ban-mask`
- Obscure output of `!config server sasl`
- `channel.get_user_status()` -> `channel.get_user_modes()`
- `!gh`/`!ghissue`/`!ghpull` can now see private repos through API keys
- Allow preventing user-specified nameservers with `!dns`
- Update `ircv3_multiline.py` to `draft/multiline`
- Prevent invalid SASL mechanisms
- `sasl-hard-fail` now defaults to False
- Multi-word karma now needs parentheses, along with a few other tweaks to prevent false positives
- `channel.topic_setter` is now a `Hostmask` object
- Obscure output of `!config server nickserv-password`
- `!quotegrab` can take a number of lines to grab
- `relay-extras` defaults to `False`
- `rest_api` responses now use a `Response` object for complex data and headers
- `!apikey` now has the subcommands `list`, `add`, `remove` and `info`
- `eval_rust.py` -> `rust.py`
- `!silence` now affects command usage errors and command suggestions
- Only do `auto-title` if the `<title>` and URL are significantly similar
- Use `"#<number>"` to denote `!ud` definition index
- Don't use an API for `user_time.py` - use `pytz`
- Support showing `!time` and `!weather` for a location, not just a user
- `Cache.py` is now more of a `key:value` store
- Temporarily cache IRCChannel settings in memory
- `utils.http.request()` now supports a complex request object
- `utils.http.request()` now uses more factors to detect a HTML page's encoding
- `utils.http.is_localhost()` -> `utils.http.host_permitted()` and reject more IP ranges
2019-10-10 12:36:55 +00:00
- `!editserver` should work for currently-disconnected servers
- `INFO` logging should go to a file - stdout should only be `WARN`
2019-10-09 11:41:50 +00:00
Fixed:
- `badges.py` now forces UTC
- `!op`/`!voice` in `channel_op.py` tried to use `send_mode()` without array arguments
- `!cignore` was not working for non-bot-admin users
- `!tw` should be asking for `tweet_mode="extended"`
- Fix `server.send_invite()` arg order
2019-10-10 12:36:55 +00:00
- `masterlogin` should only allow you to bypass `permission` checks, not e.g. `require_access` or `require_mode`
2019-10-09 11:41:50 +00:00
Removed:
- `books.py`
- `botsnack.py`
- `check_urls.py`
- `mixed_unicode.py`
- `!qget` - functionality moved to `!quote`
- `shakespeare.py`
- `slowvoice.py`
- `strax.py`
- `timer.py`
2019-08-30 18:10:17 +00:00
# 2019-08-30 - BitBot v1.11.1
Added:
- `utils.IntRangeSetting`
- `realname` was missing from `!editserver`
Changed:
- Added `"- "` to start of formatted kick lines
- Use `"+0000"` instead of `"Z"` for UTC timezone
Fixed:
- Put a deadline on sed matches to prevent DoS
- Duplicate `def op` in `channel_op.py` (due to copypaste)
- `git-prevent-highlight` was failing to unhighlight organisations
2019-08-15 12:45:54 +00:00
# 2019-08-15 - BitBot v1.11.0
2019-06-23 15:03:46 +00:00
Added:
- `rss.py`
2019-06-24 06:14:13 +00:00
- Show `weather.py` windspeed in MPh too
2019-06-24 17:22:49 +00:00
- `git_webhooks/gitea.py`
2019-08-09 14:00:33 +00:00
- `acronym.py`
- `!editserver` in `admin.py`
- `channel_keys.py` to centrally track/use channel keys
- `!mute` and `!unmute` in `channel_op.py`
- `command_suggestions.py`
- appendable command prefixes
- `@utils.kwarg`
- `fediverse.py`
- gitea webhooks (`git_webhooks/gitea.py`)
- Show available `!hash` algorithms
- per-channel-per-user ignores (`ignore.py`, `!cignore`)
- `ircv3.py` - to show ircv3 support stats
- `isup.py`
- `kick_rejoin.py`
- Handle `ERR_UNAVAILRESOURCE`
- `onionoo.py` (thanks @irl)
- `ops.py` to highlight ops (opt-in)
- Per-channel `perform.py` (`!cperform`)
- `proxy.py`
- Configurable URL shorteners (`shorturl.py`)
- `!unshorten` (`shorturl.py`)
- `slowvoice.py`
- `throttle.py`
- `!timezone` (`user_time.py`)
- Show `!weather` target nickname in command prefix
- Parse youtube playlists (`youtube.py`)
- `utils.http.url_sanitise()`
- `utils.http.request_many()`
- `./start.py --startup-disconnects`
- `./start.py --remove-server <alias>`
- `!remindme` as an alias of `!in` (`in.py`)
- `!source` and `!version` (`info.py`)
- Show TTL for DNS records (`ip_addresses.py`)
2019-08-15 12:42:53 +00:00
- `!addpoint`/`!rmpoint` as more explicit `++`/`--` for karma (`karma.py`)
2019-06-24 06:14:13 +00:00
Changed:
- Move `_check()` call to event loop func
2019-06-24 17:22:49 +00:00
- Split out github webhook functionality to `git_webhooks/github.py`
2019-08-09 14:00:33 +00:00
- Refactored @utils.export settings to be object-oriented
- Warn when channel-only/private-only is not met
- `8ball.py` -> `eightball.py` (can't import things that start with a digit)
- `github.py` -> `git_webhooks`
- revamp `!dns` to take optional nameserver and record typ
- `!quotedel` without quote removes most recent
- Relays moved to relay "groups" that channels can "join" and "leave"
- Rewrote `EventManager` for efficiency and simplicity
- Moved timers/cache/etc from read loop to event loop
- Better and more exhaustive channel move tracking
- Don't silently truncate `ParsedLine` at newline
- `@utils.hook`/`@utils.export` now use a single object that handles parsing
- `!ban`/`!kickban`/`!mute` duration syntax changed (`channel_op.py`)
- Highlight spam protection logic moved to own module (`highlight_spam.py`)
- `IRCBuffer.find()` returns the matched string
- Positive and negative karma throttled seperately (`karma.py`)
- REST API now listens in IPv6 (`rest_api.py`)
2019-08-09 14:00:33 +00:00
Fixed:
- Catch and rethrow not-found definitions in `define.py`
- `ircv3_botignore.py` event priority
- `CAP DEL` crash when `DEL`ing something that was not advertised
- `ParsedLine.format()` didn't prefix `source` with `":"`
- `_write_buffer` locking to avoid race condition
- `Capability().copy().depends_on` was mutable to the original copy
2019-06-23 15:03:46 +00:00
2019-06-23 13:44:24 +00:00
# 2019-06-23 - BitBot v1.10.0
2019-06-10 09:49:38 +00:00
Added:
- Outbound message filtering (`message_filter.py`)
2019-06-15 17:45:57 +00:00
- Mid-callback command permission checks ('event["check_assert"](utils.Check(...))')
2019-06-14 17:12:54 +00:00
- `connected-since` on stats endpoint
2019-06-14 23:51:48 +00:00
- IRCv3: draft/event-playback
2019-06-16 16:20:47 +00:00
- `auto-github-cooldown` to prevent duplicate `auto-github`s in quick succession
2019-06-17 22:23:36 +00:00
- `vote.py`
2019-06-19 22:19:10 +00:00
- IRCv3: `ircv3_botignore.py` to ignore users with `inspircd.org/bot`
- Catch and humanify `!loadmodule` "not found" exception
2019-06-21 09:53:25 +00:00
- cross-channel/network relay (`relay.py`)
- Option to allow anyone to `!startvote`
2019-06-22 21:33:04 +00:00
- IRCv3: CAP dependency system
- IRCv3: labeled-response + echo-message to correlate echos to sends
- `deferred_read.py`
2019-06-10 09:49:38 +00:00
2019-06-11 12:49:20 +00:00
Changed:
2019-06-13 10:57:01 +00:00
- Only strip 2 characters (`++` or `--`) from the end of karma
- Track CHANMODE type B, C and D (not just type D)
2019-06-14 17:12:54 +00:00
- 'x saved a duck' -> 'x befriended a duck'
2019-06-16 14:37:16 +00:00
- IRCv3: CAP REQ streamline for modules
2019-06-17 22:23:36 +00:00
- IRCv3: SASL failure defaults to being "hard" (disconnect/crash)
- `auto-title`, `auto-youtube`, `auto-imgur` etc now work in `/me`
- Move truncation logic from `SentLine` to `ParsedLine`
2019-06-18 20:43:05 +00:00
- Move `!help` logic to it's own file and rework it to be more user friendly
2019-06-19 21:18:43 +00:00
- Get `"city, state, country"` from geocoding in `location.py`, use in `weather.py`
2019-06-21 09:53:25 +00:00
- Convert IRC glob to regex, instead of using fnmatch
2019-06-22 21:33:04 +00:00
- `EventManager` calls can only come from the main thread
2019-06-23 08:45:27 +00:00
- IRCv3: `labeled-response` now depends on `batch`
2019-06-23 10:26:32 +00:00
- `format_activity.py` now only shows highest channel access symbol
2019-06-11 12:49:20 +00:00
Fixed:
- `KeyError` when sts `port` key not present
2019-06-13 10:57:01 +00:00
- lxml wasn't in requirements.txt but it should have been
2019-06-13 16:13:10 +00:00
- Any CRITICAL in read/write thread now kills the main thread too
2019-06-17 22:23:36 +00:00
- `Database.ChannelSettings.find` invalid SQL
2019-06-19 21:18:43 +00:00
- `birthday.py`'s year no longer .lstrip("0")ed
2019-06-21 09:53:25 +00:00
- IRCv3: pay attention to our own msgids (`ircv3_msgid.py`)
2019-06-21 14:32:17 +00:00
- catch and WARN when trying to remove a self-mode we didn't know we had
2019-06-23 08:45:27 +00:00
- `until_read_timeout` -> `until_read_timeout()`
2019-06-23 10:26:32 +00:00
- `PROTOCTL NAMESX` should have been send_raw() not send()
- IRCv3: handle `CAP ACK -<cap>`
- IRCv3: handle `CAP ACK` in response to `CAP REQ` that came from outside `ircv3.py`
2019-06-11 12:49:20 +00:00
2019-06-14 17:12:54 +00:00
Removed:
- `!set`/`!channelset`/`!serverset`/`!botset` (replaced with `!config`)
- `bytes-read-per-second` and `bytes-written-per-second` from stats endpoint
2019-06-19 21:18:43 +00:00
- `upc.py`
2019-06-14 17:12:54 +00:00
2019-06-09 16:34:45 +00:00
# 2019-06-09 - BitBot v1.9.2
Added:
- Show seconds it took to !bef/!trap
Changed:
- IRCv3: `draft/resume-0.4` -> `draft/resume-0.5`
Fixed:
- Fix scenario in which some-but-not-all threads die
- Daemonify tweet thread
- Don't add TAGMSGs to IRCBuffer objects
2019-06-08 10:03:18 +00:00
# 2019-06-08 - BitBot v1.9.1
2019-06-08 10:02:44 +00:00
2019-06-08 10:04:25 +00:00
Fixed:
2019-06-08 10:02:44 +00:00
- Fix ERROR on `CAP NEW` caused by STS typo
- Fix hanging on `CAP NEW` due to duplicate `REQ`
- STATUSMSG stripping should only be STATUSMSG symbols, not all PREFIX symbols
2019-06-07 16:13:53 +00:00
# 2019-06-07 - BitBot v1.9.0
2019-06-03 13:23:59 +00:00
Added:
- IRCv3: Also look at CTCP events for msgids
2019-06-04 17:01:31 +00:00
- Sub-event system within all SentLines
2019-06-07 16:11:34 +00:00
- Show last action in `!seen` (e.g. 'seen 1m ago (<jesopo> hi)')
2019-06-05 13:29:41 +00:00
- WARN when labels are not responded to in a timely fashion
2019-06-07 16:09:34 +00:00
- IRCv3: send `+draft/typing` while processing commands
- Display github `ready_for_review` better
- Parse 221 (RPL_UMODEIS) numerics
2019-06-03 13:23:59 +00:00
2019-06-04 13:34:11 +00:00
Changed:
- `!np` against a known nickname will attempt to resolve to lastfm username
2019-06-04 13:34:50 +00:00
- `PING` and `PONG` now avoid write throttling
2019-06-07 16:11:34 +00:00
- `!bang` -> `!trap`, 'shot' -> 'trapped' for ducks
2019-06-07 16:09:34 +00:00
- Socket reads and socket writes have been moved on to seperate threads
- Use Deques for chat history (more performant!)
2019-06-04 13:34:11 +00:00
2019-06-03 13:23:59 +00:00
Fixed:
- Differentiate between send and received CTCP events
2019-06-04 13:34:11 +00:00
- `IRCSocket._send` will now only return lines that definitely hit the wire
2019-06-05 10:45:35 +00:00
- GitHub `commit_comment` event formatting exception
2019-06-07 16:11:34 +00:00
- Strip xref tags from `!define` output
2019-06-05 15:57:01 +00:00
- `check_purge()` after removing contextual hooks from an EventHook
2019-06-07 16:09:34 +00:00
- IRCv3: Escape message tag values
2019-06-03 13:23:59 +00:00
2019-06-03 12:30:39 +00:00
# 2019-06-03 - BitBot v1.8.0
2019-05-26 15:26:32 +00:00
Added:
- Module dependency system
2019-05-28 09:47:31 +00:00
- Enable TCP keepalives
- IRCv3: `draft/label` tracking on every sent line when CAPs permit
- Enforce Python version 3.6.0 or later
2019-06-01 14:09:02 +00:00
- 'module-whitelist'/'module-blacklist' in `bot.conf`
2019-05-26 15:26:32 +00:00
2019-05-30 06:45:49 +00:00
Changed:
- IRCv3: Use last `server-time` for `RESUME` - not last .recv() time
2019-05-30 06:45:49 +00:00
- IRCv3: `draft/labeled-response` -> `draft/labeled-response-0.2`
2019-06-02 14:21:51 +00:00
- IRCv3: Prune already-seen messages in `chathistory` batches
2019-06-03 11:46:08 +00:00
- Consolidate `PRIVMSG`, `NOTICE` and `TAGMSG` handlers in to one
2019-05-30 06:45:49 +00:00
2019-05-26 15:26:32 +00:00
Fixed
2019-06-03 11:46:34 +00:00
- GitHub highlight prevention - don't detect highlights mid-word
2019-05-28 12:51:58 +00:00
- Pass already-decoded data in to BeautifulSoup
2019-05-28 09:47:31 +00:00
- !enablemodule actually removes module from blacklist setting
2019-05-31 17:00:13 +00:00
- Only enact write throttling when immediate-write-buffer is empty
2019-06-02 06:23:49 +00:00
- Non-throttled lines no longer delay throttled lines
2019-05-26 15:26:32 +00:00
2019-05-24 05:52:25 +00:00
# 2019-05-24 - BitBot v1.7.1
Fixed:
- Fix crash caused by CAP NEW
2019-05-23 22:09:35 +00:00
# 2019-05-23 - BitBot v1.7.0
2019-05-23 22:05:23 +00:00
2019-05-23 22:09:35 +00:00
Added:
2019-05-23 22:05:23 +00:00
- Add !addserver
2019-05-23 22:09:35 +00:00
- Add !masterpassword
2019-05-23 22:05:23 +00:00
- Add auto-tweet setting
2019-05-23 22:09:35 +00:00
- Support triggering commands by regex
Changed:
- Show usage examples for user/channel/server/bot settings
- Strip common command prefixes from PM commands so "!help" works
2019-05-23 22:05:23 +00:00
- Change auto-github to work for github urls too
2019-05-23 22:09:35 +00:00
- IRCv3: draft/resume-0.3 -> draft/resume-0.4
2019-05-23 22:05:23 +00:00
- Remove `ipv4` server attribute - figure it out automatically
2019-05-23 22:09:35 +00:00
Fixed:
- Typos/bugs in BATCH and FAIL
2019-05-23 22:05:23 +00:00
- Fix crash caused by BitBot messaging himself