Compare commits

..

8 Commits
v1.41.0 ... v1

Author SHA1 Message Date
Steve Kowalik
72f4ac0de5
Stop using the event_loop fixture (#4670) 2025-09-21 17:43:53 +02:00
marfer
82a24d6b53
Correct handling of trailing zeros in _rle_encode (#4702) 2025-09-21 17:43:34 +02:00
iLuisTheDev
859a83a1a5
Add BotCommandsTooMuchError class (#4700) 2025-09-13 17:50:23 +02:00
Nick80835
2b56fa91bb Bump to v1.41.2 2025-09-04 21:07:44 +02:00
Nick80835
2d5fad6565 Ensure document spoiler is preserved in utils.get_input_media 2025-09-04 21:07:44 +02:00
Lonami Exo
ba201b9189 Bump to v1.41.1 2025-09-04 19:52:24 +02:00
Lonami Exo
bc5c5d54b1 Fix incorrect async session warning 2025-09-04 19:52:00 +02:00
Darskiy
ee778ba763 Revert "Fix spoilers when sending InputPhoto and InputDocument"
This reverts commit 45a546a675.
2025-09-04 19:45:43 +02:00
6 changed files with 20 additions and 12 deletions

View File

@ -343,7 +343,7 @@ class UpdateMethods:
if updates: if updates:
self._log[__name__].info('Got difference for account updates') self._log[__name__].info('Got difference for account updates')
_preprocess_updates = await utils.maybe_async(self._preprocess_updates(updates, users, chats)) _preprocess_updates = await self._preprocess_updates(updates, users, chats)
updates_to_dispatch.extend(_preprocess_updates) updates_to_dispatch.extend(_preprocess_updates)
continue continue
@ -442,7 +442,7 @@ class UpdateMethods:
if updates: if updates:
self._log[__name__].info('Got difference for channel %d updates', get_diff.channel.channel_id) self._log[__name__].info('Got difference for channel %d updates', get_diff.channel.channel_id)
_preprocess_updates = await utils.maybe_async(self._preprocess_updates(updates, users, chats)) _preprocess_updates = await self._preprocess_updates(updates, users, chats)
updates_to_dispatch.extend(_preprocess_updates) updates_to_dispatch.extend(_preprocess_updates)
continue continue
@ -464,7 +464,7 @@ class UpdateMethods:
except GapError: except GapError:
continue # get(_channel)_difference will start returning requests continue # get(_channel)_difference will start returning requests
_preprocess_updates = await utils.maybe_async(self._preprocess_updates(processed, users, chats)) _preprocess_updates = await self._preprocess_updates(processed, users, chats)
updates_to_dispatch.extend(_preprocess_updates) updates_to_dispatch.extend(_preprocess_updates)
except asyncio.CancelledError: except asyncio.CancelledError:
pass pass

View File

@ -438,9 +438,9 @@ def get_input_media(
if media.SUBCLASS_OF_ID == 0xfaf846f4: # crc32(b'InputMedia') if media.SUBCLASS_OF_ID == 0xfaf846f4: # crc32(b'InputMedia')
return media return media
elif media.SUBCLASS_OF_ID == 0x846363e0: # crc32(b'InputPhoto') elif media.SUBCLASS_OF_ID == 0x846363e0: # crc32(b'InputPhoto')
return types.InputMediaPhoto(media, ttl_seconds=ttl, spoiler=media.spoiler) return types.InputMediaPhoto(media, ttl_seconds=ttl)
elif media.SUBCLASS_OF_ID == 0xf33fdb68: # crc32(b'InputDocument') elif media.SUBCLASS_OF_ID == 0xf33fdb68: # crc32(b'InputDocument')
return types.InputMediaDocument(media, ttl_seconds=ttl, spoiler=media.spoiler) return types.InputMediaDocument(media, ttl_seconds=ttl)
except AttributeError: except AttributeError:
_raise_cast_fail(media, 'InputMedia') _raise_cast_fail(media, 'InputMedia')
@ -460,6 +460,7 @@ def get_input_media(
if isinstance(media, types.MessageMediaDocument): if isinstance(media, types.MessageMediaDocument):
return types.InputMediaDocument( return types.InputMediaDocument(
id=get_input_document(media.document), id=get_input_document(media.document),
spoiler=media.spoiler,
ttl_seconds=ttl or media.ttl_seconds ttl_seconds=ttl or media.ttl_seconds
) )
@ -1094,6 +1095,8 @@ def _rle_encode(string):
count = 0 count = 0
new += bytes([cur]) new += bytes([cur])
if count != 0:
new += b'\0' + bytes([count])
return new return new

View File

@ -1,3 +1,3 @@
# Versions should comply with PEP440. # Versions should comply with PEP440.
# This line is parsed in setup.py: # This line is parsed in setup.py:
__version__ = '1.41.0' __version__ = '1.41.2'

View File

@ -34,6 +34,7 @@ BOTS_TOO_MUCH,400,There are too many bots in this chat/channel
BOT_CHANNELS_NA,400,Bots can't edit admin privileges BOT_CHANNELS_NA,400,Bots can't edit admin privileges
BOT_COMMAND_DESCRIPTION_INVALID,400,"The command description was empty, too long or had invalid characters used" BOT_COMMAND_DESCRIPTION_INVALID,400,"The command description was empty, too long or had invalid characters used"
BOT_COMMAND_INVALID,400,The specified command is invalid BOT_COMMAND_INVALID,400,The specified command is invalid
BOT_COMMANDS_TOO_MUCH,400,"The provided commands are too many"
BOT_DOMAIN_INVALID,400,The domain used for the auth button does not match the one configured in @BotFather BOT_DOMAIN_INVALID,400,The domain used for the auth button does not match the one configured in @BotFather
BOT_GAMES_DISABLED,400,Bot games cannot be used in this type of chat BOT_GAMES_DISABLED,400,Bot games cannot be used in this type of chat
BOT_GROUPS_BLOCKED,400,This bot can't be added to groups BOT_GROUPS_BLOCKED,400,This bot can't be added to groups

1 name codes description
34 BOT_CHANNELS_NA 400 Bots can't edit admin privileges
35 BOT_COMMAND_DESCRIPTION_INVALID 400 The command description was empty, too long or had invalid characters used
36 BOT_COMMAND_INVALID 400 The specified command is invalid
37 BOT_COMMANDS_TOO_MUCH 400 The provided commands are too many
38 BOT_DOMAIN_INVALID 400 The domain used for the auth button does not match the one configured in @BotFather
39 BOT_GAMES_DISABLED 400 Bot games cannot be used in this type of chat
40 BOT_GROUPS_BLOCKED 400 This bot can't be added to groups

View File

@ -39,9 +39,9 @@ def test_strip_text():
class TestSyncifyAsyncContext: class TestSyncifyAsyncContext:
class NoopContextManager: class NoopContextManager:
def __init__(self, loop): def __init__(self):
self.count = 0 self.count = 0
self.loop = loop self.loop = helpers.get_running_loop()
async def __aenter__(self): async def __aenter__(self):
self.count += 1 self.count += 1
@ -54,8 +54,8 @@ class TestSyncifyAsyncContext:
__enter__ = helpers._sync_enter __enter__ = helpers._sync_enter
__exit__ = helpers._sync_exit __exit__ = helpers._sync_exit
def test_sync_acontext(self, event_loop): def test_sync_acontext(self):
contm = self.NoopContextManager(event_loop) contm = self.NoopContextManager()
assert contm.count == 0 assert contm.count == 0
with contm: with contm:
@ -64,8 +64,8 @@ class TestSyncifyAsyncContext:
assert contm.count == 0 assert contm.count == 0
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_async_acontext(self, event_loop): async def test_async_acontext(self):
contm = self.NoopContextManager(event_loop) contm = self.NoopContextManager()
assert contm.count == 0 assert contm.count == 0
async with contm: async with contm:

View File

@ -52,3 +52,7 @@ def test_private_get_extension():
assert utils._get_extension(empty_buffer) == '' assert utils._get_extension(empty_buffer) == ''
assert utils._get_extension(empty_buffer) == '' # make sure it did seek back assert utils._get_extension(empty_buffer) == '' # make sure it did seek back
assert utils._get_extension(CustomFd('foo')) == '' assert utils._get_extension(CustomFd('foo')) == ''
def test_rle_encode_trailing_zeros():
assert utils._rle_encode(b'\x12\x00\x00\x00\x00') == b'\x12\x00\x04'