Further improve the session-switching mechanism for inline bots (#739)

* Ability to run multiple bot.

Global session creates a problem for other bot. As that session was generated for another bot can't be used by this bot.

* Use the existing media session lock

Co-authored-by: Dan <14043624+delivrance@users.noreply.github.com>
This commit is contained in:
Md. Hasibul Kabir 2021-08-29 14:49:47 +06:00 committed by GitHub
parent aea1ffc46f
commit e68da74e89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -16,29 +16,22 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from asyncio import Lock
import pyrogram
from pyrogram import raw
from pyrogram.errors import AuthBytesInvalid
from pyrogram.session import Session
from pyrogram.session.auth import Auth
lock = Lock()
sessions = {}
async def get_session(client: "pyrogram.Client", dc_id: int):
if dc_id == await client.storage.dc_id():
return client
async with lock:
global sessions
async with client.media_sessions_lock:
if client.media_sessions.get(dc_id):
return client.media_sessions[dc_id]
if sessions.get(dc_id):
return sessions[dc_id]
session = sessions[dc_id] = Session(
session = client.media_sessions[dc_id] = Session(
client, dc_id,
await Auth(client, dc_id, False).create(),
False, is_media=True