diff --git a/readthedocs/misc/changelog.rst b/readthedocs/misc/changelog.rst index 8d6484de..9f8cacfa 100644 --- a/readthedocs/misc/changelog.rst +++ b/readthedocs/misc/changelog.rst @@ -13,6 +13,136 @@ it can take advantage of new goodies! .. contents:: List of All Versions +Channel comments and Anonymous Admins (v1.17) +============================================= + ++------------------------+ +| Scheme layer used: 119 | ++------------------------+ + +New minor version, new layer change! This time is a good one to remind every +consumer of Python libraries that **you should always specify fixed versions +of your dependencies**! If you're using a ``requirements.txt`` file and you +want to stick with the old version (or any version) for the time being, you +can `use the following syntax `__: + +.. code-block:: text + + telethon~=1.16.0 + +This will install any version compatible with the written version (so, any in +the ``1.16`` series). Patch releases will never break your code (and if they +do, it's a bug). You can also use that syntax in ``pip install``. Your code +can't know what new versions will look like, so saying it will work with all +versions is a lie and will cause issues. + +The reason to bring this up is that Telegram has changed things again, and +with the introduction of anonymous administrators and channel comments, the +sender of a message may not be a :tl:`User`! To accomodate for this, the field +is now a :tl:`Peer` and not `int`. As a reminder, it's always a good idea to +use Telethon's friendly methods and custom properties, which have a higher +stability guarantee than accessing raw API fields. + +Even if you don't update, your code will still need to account for the fact +that the sender of a message might be one of the accounts Telegram introduced +to preserve backwards compatibility, because this is a server-side change, so +it's better to update and not lag behind. As it's mostly just a single person +driving the project on their free time, bug-fixes are not backported. + +This version also updates the format of SQLite sessions (the default), so +after upgrading and using an old session, the session will be updated, which +means trying to use it back in older versions of the library won't work. + +For backwards-compatibility sake, the library has introduced the properties +`Message.reply_to_msg_id ` +and `Message.to_id ` that behave +like they did before (Telegram has renamed and changed how these fields work). + + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* ``Message.from_id`` is now a :tl:`Peer`, not `int`! If you want the marked + sender ID (much like old behaviour), replace all uses of ``.from_id`` with + ``.sender_id``. This will mostly work, but of course in old and new versions + you have to account for the fact that this sender may no longer be a user. +* You can no longer assign to `Message.reply_to_msg_id + ` and `Message.to_id + ` because these are now properties + that offer a "view" to the real value from a different field. +* Answering inline queries with a ``photo`` or ``document`` will now send the + photo or document used in the resulting message by default. Not sending the + media was technically a bug, but some people may be relying on this old + behaviour. You can use the old behaviour with ``include_media=False``. + +Additions +~~~~~~~~~ + +* New ``raise_last_call_error`` parameter in the client constructor to raise + the same error produced by the last failing call, rather than a generic + `ValueError`. +* New ``formatting_entities`` parameter in `client.send_message() + `, and + `client.send_file() ` + to bypass the parse mode and manually specify the formatting entities. +* New `client.get_permissions() ` + method to query a participant's permissions in a group or channel. This + request is slightly expensive in small group chats because it has to fetch + the entire chat to check just a user, so use of a cache is advised. +* `Message.click() ` now works on + normal polls! +* New ``local_addr`` parameter in the client constructor to use a specific + local network address when connecting to Telegram. +* `client.inline_query() ` now + lets you specify the chat where the query is being made from, which some + bots need to provide certain functionality. +* You can now get comments in a channel post with the ``reply_to`` parameter in + `client.iter_messages() `. + Comments are messages that "reply to" a specific channel message, hence the + name (which is consistent with how Telegram's API calls it). + +Enhancements +~~~~~~~~~~~~ + +* Updated documentation and list of known errors. +* If ``hachoir`` is available, the file metadata can now be extracted from + streams and in-memory bytes. +* The default parameters used to initialize a connection now match the format + of those used by Telegram Desktop. +* Specifying 0 retries will no longer cause the library to attempt to reconnect. +* The library should now be able to reliably download very large files. +* Global search should work more reliably now. +* Old usernames are evicted from cache, so getting entities by cached username + should now be more reliable. +* Slightly less noisy logs. +* Stability regarding transport-level errors (transport flood, authorization + key not found) should be improved. In particular, you should no longer be + getting unnecessarily logged out. +* Reconnection should no longer occur if the client gets logged out (for + example, another client revokes the session). + +Bug fixes +~~~~~~~~~ + +* In some cases, there were issues when using `events.Album + ` together with `events.Raw + `. +* For some channels, one of their channel photos would not show up in + `client.iter_profile_photos() `. +* In some cases, a request that failed to be sent would be forgotten, causing + the original caller to be "locked" forever for a response that would never + arrive. Failing requests should now consistently be automatically re-sent. +* The library should more reliably handle certain updates with "empty" data. +* Sending documents in inline queries should now work fine. +* Manually using `client.sign_up ` + should now work correctly, instead of claiming "code invalid". + +Special mention to some of the other changes in the 1.16.x series: + +* The ``thumb`` for ``download_media`` now supports both `str` and :tl:`VideoSize`. +* Thumbnails are sorted, so ``-1`` is always the largest. + + Bug Fixes (v1.16.1) =================== diff --git a/telethon/client/chats.py b/telethon/client/chats.py index a9e9c704..64cbe52b 100644 --- a/telethon/client/chats.py +++ b/telethon/client/chats.py @@ -1167,6 +1167,11 @@ class ChatMethods: """ Fetches the permissions of a user in a specific chat or channel. + .. note:: + + This request has to fetch the entire chat for small group chats, + which can get somewhat expensive, so use of a cache is advised. + Arguments entity (`entity`): The channel or chat the user is participant of. diff --git a/telethon/version.py b/telethon/version.py index c8a2db55..e7b5b149 100644 --- a/telethon/version.py +++ b/telethon/version.py @@ -1,3 +1,3 @@ # Versions should comply with PEP440. # This line is parsed in setup.py: -__version__ = '1.16.4' +__version__ = '1.17.0'