Size: a a a

Telethon Talks RU

2020 July 19

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
дада, я уже попробовал
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
он пустой sqlite создает
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
потому и задал вопрос тут)
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
мне почему-то казалось, что должно быть какое-то менее хаки решение
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
ABC
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
там он "якобы" есть
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
но...
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ
но...
return to_instance or self.__class__()

))
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
сек
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
можно было бы пр зарядить, но не понятно на сколько это вообще востребованная история, достаточно редкий юзкейс)
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
Evaluated expression:
from telethon.sessions import StringSession
p(dir(StringSession))

Result:
list
 - '__abstractmethods__'
 - '__class__'
 - '__delattr__'
 - '__dict__'
 - '__dir__'
 - '__doc__'
 - '__eq__'
 - '__format__'
 - '__ge__'
 - '__getattribute__'
 - '__gt__'
 - '__hash__'
 - '__init__'
 - '__init_subclass__'
 - '__le__'
 - '__lt__'
 - '__module__'
 - '__ne__'
 - '__new__'
 - '__reduce__'
 - '__reduce_ex__'
 - '__repr__'
 - '__setattr__'
 - '__sizeof__'
 - '__slots__'
 - '__str__'
 - '__subclasshook__'
 - '__weakref__'
 - '_abc_impl'
 - '_entities_to_rows'
 - '_entity_to_row'
 - '_entity_values_to_row'
 - 'auth_key'
 - 'cache_file'
 - 'clone'
 - 'close'
 - 'dc_id'
 - 'decode'
 - 'delete'
 - 'encode'
 - 'get_entity_rows_by_id'
 - 'get_entity_rows_by_name'
 - 'get_entity_rows_by_phone'
 - 'get_entity_rows_by_username'
 - 'get_file'
 - 'get_input_entity'
 - 'get_update_state'
 - 'list_sessions'
 - 'port'
 - 'process_entities'
 - 'save'
 - 'server_address'
 - 'set_dc'
 - 'set_update_state'
 - 'takeout_id'
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
Evaluated expression:
from telethon.sessions import StringSession
(StringSession.save(client.session))

Result:
1AZWaWdcBuxyFOpPcZKneeHSf1XDe2ndyXwczrScowaJgnEKQ7_5lbolwAM7A7zVsMVP6dVDZSOqhEGUUR-6C5WuBZOzghADkePN3Gh-ROgEKyPVw4nUBDr7kOgmThe2kj_wGFe0Vx_iGktgv4wG_H27U2zHPDUJWCE93AqDhfMzLtMclI_-M0B69liieYOSiQhKXwI3EbJ0LM90nYgBrLz27X2Df_ACMqKXmCsD9vTEgjzJNSmIK_wrKmf-JLMV9swkSkUZ73EY3xyXe4SNgs7JTaur1Rtc3m5Uv-WqNpq71utHt0TsrlNrFnWMH8iXspX2Vxn_5QG0VlyFYx0-kupz8QLffP2I=
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
я как раз кидал сюда
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
session_string = '1BVtsOHsBu2Qw7uxe_Nsgr7e2qnGV1a_HreodKfCM_ncR5nQz0_KDPrvHCeUDGVWMXTOGmHx3UgwRasiUg8PdKTidPKzJgsYGl7xE6MS4Bbt749n9Cd1m1xOBA_RhoDaxGBTQsV81dwQVFaX6aAjqkEFcbmrwaFbuUr1SgjqiGD6Ti5WANg_WM8mdxgvjp7o0ORV_Bk5CMnv0aoWPhI4pf_hGGrmmXKuRcxTNxoy2Sq33CLbbPQGkk1SQ4e-W1LMpQtxMzPHh1Ui6_mWnkeOjI-802dlBWWqx5kryLsgqWCcnYvZ_GnRuTZBe7KBGIJ4OM3wEEBRHuN8g9H2sRSxuWQGw7YgrwL0='
s = StringSession(session_string)
print(s.dc_id, s.port, s.server_address, s.auth_key.key)
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
можно достать напрямую значения без дрочки, осталось записать в таблицу
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
class StringSession(MemorySession):
   """
   This minimal session file can be easily saved and loaded as a string.
   It is thought to be used where you don't want to create any on-disk
   files but would still like to be able to save and load existing sessions
   by other means.
   """
   def __init__(self, string=None):
       super().__init__()
       if string and string[0] != CURRENT_VERSION:
           raise ValueError('Not a valid string')

       ip_len = 4 if len(string) == 353 else 16
       self._dc_id, ip, self._port, key = struct.unpack(
           '>B{}sH256s'.format(ip_len), base64.urlsafe_b64decode(string[1:]))

       self._server_address = ipaddress.ip_address(ip).compressed
       if any(key):
           self._auth_key = AuthKey(key)

   def save(self):
       if not self._auth_key:
           return ''

       ip = ipaddress.ip_address(self._server_address).packed
       return CURRENT_VERSION + base64.urlsafe_b64encode(struct.pack(
           '>B{}sH256s'.format(len(ip)),
           self._dc_id,
           ip,
           self._port,
           self._auth_key.key
       )).decode('ascii')
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
n̲f̲w̲s̲n̲c̲k̲e̲d̲
вот dirty code, но работает
он даже не сохраняет в sqlite ничего, только получает значения, которые туда нужно будет записать:

import struct
import ipaddress


from telethon.sessions import StringSession


_STRUCT_PREFORMAT = '>B{}sH256s'
session_string = '1BVtsOHsBu2Qw7uxe_Nsgr7e2qnGV1a_HreodKfCM_ncR5nQz0_KDPrvHCeUDGVWMXTOGmHx3UgwRasiUg8PdKTidPKzJgsYGl7xE6MS4Bbt749n9Cd1m1xOBA_RhoDaxGBTQsV81dwQVFaX6aAjqkEFcbmrwaFbuUr1SgjqiGD6Ti5WANg_WM8mdxgvjp7o0ORV_Bk5CMnv0aoWPhI4pf_hGGrmmXKuRcxTNxoy2Sq33CLbbPQGkk1SQ4e-W1LMpQtxMzPHh1Ui6_mWnkeOjI-802dlBWWqx5kryLsgqWCcnYvZ_GnRuTZBe7KBGIJ4OM3wEEBRHuN8g9H2sRSxuWQGw7YgrwL0='
string = session_string[1:]
ip_len = 4 if len(string) == 352 else 16
dc_id, ip, port, key = struct.unpack(_STRUCT_PREFORMAT.format(ip_len), StringSession.decode(string))
server_address = ipaddress.ip_address(ip).compressed
print(dc_id, server_address, port, key)
я оттуда это и взял вот, да
источник

n

n̲f̲w̲s̲n̲c̲k̲e̲d̲... in Telethon Talks RU
n̲f̲w̲s̲n̲c̲k̲e̲d̲
session_string = '1BVtsOHsBu2Qw7uxe_Nsgr7e2qnGV1a_HreodKfCM_ncR5nQz0_KDPrvHCeUDGVWMXTOGmHx3UgwRasiUg8PdKTidPKzJgsYGl7xE6MS4Bbt749n9Cd1m1xOBA_RhoDaxGBTQsV81dwQVFaX6aAjqkEFcbmrwaFbuUr1SgjqiGD6Ti5WANg_WM8mdxgvjp7o0ORV_Bk5CMnv0aoWPhI4pf_hGGrmmXKuRcxTNxoy2Sq33CLbbPQGkk1SQ4e-W1LMpQtxMzPHh1Ui6_mWnkeOjI-802dlBWWqx5kryLsgqWCcnYvZ_GnRuTZBe7KBGIJ4OM3wEEBRHuN8g9H2sRSxuWQGw7YgrwL0='
s = StringSession(session_string)
print(s.dc_id, s.port, s.server_address, s.auth_key.key)
вот это в одну строку получается, а если начинать писать в sqlite — уже вылазит)
источник

⟁ᴡ

⟁⃤ʀᴛʜᴜʀ ᴡ⟁ʏɴΞ... in Telethon Talks RU
Evaluated expression:
from telethon.crypto import AuthKey
from telethon.sessions import StringSession
p(StringSession.auth_key, client.session.auth_key)

Result:
property:

AuthKey:
 aux_hash: 14608300270471690784
 key: <…>
 key_id: 10223561288105183757
источник