Merge branch 'develop' into asyncio

# Conflicts:
#	pyrogram/__init__.py
#	pyrogram/client/ext/utils.py
This commit is contained in:
Dan 2018-11-04 18:00:07 +01:00
commit a9c4c72e5f
5 changed files with 25 additions and 38 deletions

View File

@ -68,3 +68,4 @@ USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups
API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side
USER_NOT_PARTICIPANT The user is not a member of this chat USER_NOT_PARTICIPANT The user is not a member of this chat
CHANNEL_PRIVATE The channel/supergroup is not accessible CHANNEL_PRIVATE The channel/supergroup is not accessible
MESSAGE_IDS_EMPTY The requested message doesn't exist
1 id message
68 API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side
69 USER_NOT_PARTICIPANT The user is not a member of this chat
70 CHANNEL_PRIVATE The channel/supergroup is not accessible
71 MESSAGE_IDS_EMPTY The requested message doesn't exist

View File

@ -82,7 +82,7 @@ If no error shows up you are good to go.
>>> import pyrogram >>> import pyrogram
>>> pyrogram.__version__ >>> pyrogram.__version__
'0.9.0' '0.9.1'
.. _TgCrypto: https://docs.pyrogram.ml/resources/TgCrypto .. _TgCrypto: https://docs.pyrogram.ml/resources/TgCrypto
.. _develop: http://github.com/pyrogram/pyrogram .. _develop: http://github.com/pyrogram/pyrogram

View File

@ -31,7 +31,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance
"e" if sys.getfilesystemencoding() != "utf-8" else "\xe8" "e" if sys.getfilesystemencoding() != "utf-8" else "\xe8"
) )
__license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)" __license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
__version__ = "0.9.0.async1" __version__ = "0.9.1.async1"
from .api.errors import Error from .api.errors import Error
from .client.types import ( from .client.types import (

View File

@ -19,16 +19,14 @@
import asyncio import asyncio
import logging import logging
import sys import sys
import time
from base64 import b64decode, b64encode from base64 import b64decode, b64encode
from concurrent.futures.thread import ThreadPoolExecutor from concurrent.futures.thread import ThreadPoolExecutor
from struct import pack from struct import pack
from weakref import proxy from weakref import proxy
from pyrogram.api.errors import FloodWait
from pyrogram.client import types as pyrogram_types from pyrogram.client import types as pyrogram_types
from ...api import types, functions from ...api import types, functions
from ...api.errors import StickersetInvalid from ...api.errors import StickersetInvalid, MessageIdsEmpty
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -227,7 +225,7 @@ def parse_channel_chat(channel: types.Channel) -> pyrogram_types.Chat:
title=channel.title, title=channel.title,
username=getattr(channel, "username", None), username=getattr(channel, "username", None),
photo=parse_chat_photo(getattr(channel, "photo", None)), photo=parse_chat_photo(getattr(channel, "photo", None)),
restriction_reason=getattr(channel, "restriction_reason") restriction_reason=getattr(channel, "restriction_reason", None)
) )
@ -647,19 +645,14 @@ async def parse_messages(
m.caption.init(m._client, m.caption_entities or []) m.caption.init(m._client, m.caption_entities or [])
if message.reply_to_msg_id and replies: if message.reply_to_msg_id and replies:
while True:
try: try:
m.reply_to_message = await client.get_messages( m.reply_to_message = await client.get_messages(
m.chat.id, m.chat.id,
reply_to_message_ids=message.id, reply_to_message_ids=message.id,
replies=replies - 1 replies=replies - 1
) )
except FloodWait as e: except MessageIdsEmpty:
log.warning("get_messages flood: waiting {} seconds".format(e.x)) m.reply_to_message = None
time.sleep(e.x)
continue
else:
break
elif isinstance(message, types.MessageService): elif isinstance(message, types.MessageService):
action = message.action action = message.action
@ -760,19 +753,11 @@ async def parse_messages(
) )
if isinstance(action, types.MessageActionPinMessage): if isinstance(action, types.MessageActionPinMessage):
while True:
try:
m.pinned_message = await client.get_messages( m.pinned_message = await client.get_messages(
m.chat.id, m.chat.id,
reply_to_message_ids=message.id, reply_to_message_ids=message.id,
replies=0 replies=0
) )
except FloodWait as e:
log.warning("get_messages flood: waiting {} seconds".format(e.x))
time.sleep(e.x)
continue
else:
break
else: else:
m = pyrogram_types.Message(message_id=message.id, client=proxy(client)) m = pyrogram_types.Message(message_id=message.id, client=proxy(client))
@ -985,6 +970,7 @@ def parse_chat_members(members: types.channels.ChannelParticipants or types.mess
parsed_members = [] parsed_members = []
if isinstance(members, types.channels.ChannelParticipants): if isinstance(members, types.channels.ChannelParticipants):
count = members.count
members = members.participants members = members.participants
for member in members: for member in members:
@ -1043,7 +1029,7 @@ def parse_chat_members(members: types.channels.ChannelParticipants or types.mess
parsed_members.append(chat_member) parsed_members.append(chat_member)
return pyrogram_types.ChatMembers( return pyrogram_types.ChatMembers(
total_count=members.count, total_count=count,
chat_members=parsed_members chat_members=parsed_members
) )
else: else:

View File

@ -31,7 +31,7 @@ class InlineKeyboardButton(Object):
text (``str``): text (``str``):
Label text on the button. Label text on the button.
callback_data (``str``, *optional*): callback_data (``bytes``, *optional*):
Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes. Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes.
url (``str``, *optional*): url (``str``, *optional*):
@ -59,7 +59,7 @@ class InlineKeyboardButton(Object):
def __init__( def __init__(
self, self,
text: str, text: str,
callback_data: str = None, callback_data: bytes = None,
url: str = None, url: str = None,
switch_inline_query: str = None, switch_inline_query: str = None,
switch_inline_query_current_chat: str = None, switch_inline_query_current_chat: str = None,
@ -85,7 +85,7 @@ class InlineKeyboardButton(Object):
if isinstance(b, KeyboardButtonCallback): if isinstance(b, KeyboardButtonCallback):
return InlineKeyboardButton( return InlineKeyboardButton(
text=b.text, text=b.text,
callback_data=b.data.decode() callback_data=b.data
) )
if isinstance(b, KeyboardButtonSwitchInline): if isinstance(b, KeyboardButtonSwitchInline):
@ -102,7 +102,7 @@ class InlineKeyboardButton(Object):
def write(self): def write(self):
if self.callback_data: if self.callback_data:
return KeyboardButtonCallback(self.text, self.callback_data.encode()) return KeyboardButtonCallback(self.text, self.callback_data)
if self.url: if self.url:
return KeyboardButtonUrl(self.text, self.url) return KeyboardButtonUrl(self.text, self.url)