mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-16 19:41:07 +03:00
Move connect() parameters to init and ignore signature warnings
This commit is contained in:
parent
a07c7bd0d0
commit
d788d30de2
|
@ -71,18 +71,11 @@ class TelegramBareClient:
|
||||||
|
|
||||||
# region Connecting
|
# region Connecting
|
||||||
|
|
||||||
def connect(self, device_model=None, system_version=None,
|
def connect(self, device_model, system_version, app_version, lang_code):
|
||||||
app_version=None, lang_code=None):
|
|
||||||
"""Connects to the Telegram servers, executing authentication if
|
"""Connects to the Telegram servers, executing authentication if
|
||||||
required. Note that authenticating to the Telegram servers is
|
required. Note that authenticating to the Telegram servers is
|
||||||
not the same as authenticating the desired user itself, which
|
not the same as authenticating the desired user itself, which
|
||||||
may require a call (or several) to 'sign_in' for the first time.
|
may require a call (or several) to 'sign_in' for the first time.
|
||||||
|
|
||||||
Default values for the optional parameters if left as None are:
|
|
||||||
device_model = platform.node()
|
|
||||||
system_version = platform.system()
|
|
||||||
app_version = TelegramClient.__version__
|
|
||||||
lang_code = 'en'
|
|
||||||
"""
|
"""
|
||||||
transport = TcpTransport(self.session.server_address,
|
transport = TcpTransport(self.session.server_address,
|
||||||
self.session.port, proxy=self.proxy)
|
self.session.port, proxy=self.proxy)
|
||||||
|
@ -97,16 +90,6 @@ class TelegramBareClient:
|
||||||
self.sender = MtProtoSender(transport, self.session)
|
self.sender = MtProtoSender(transport, self.session)
|
||||||
self.sender.connect()
|
self.sender.connect()
|
||||||
|
|
||||||
# Set the default parameters if left unspecified
|
|
||||||
if not device_model:
|
|
||||||
device_model = platform.node()
|
|
||||||
if not system_version:
|
|
||||||
system_version = platform.system()
|
|
||||||
if not app_version:
|
|
||||||
app_version = self.__version__
|
|
||||||
if not lang_code:
|
|
||||||
lang_code = 'en'
|
|
||||||
|
|
||||||
# Now it's time to send an InitConnectionRequest
|
# Now it's time to send an InitConnectionRequest
|
||||||
# This must always be invoked with the layer we'll be using
|
# This must always be invoked with the layer we'll be using
|
||||||
query = InitConnectionRequest(
|
query = InitConnectionRequest(
|
||||||
|
@ -140,7 +123,7 @@ class TelegramBareClient:
|
||||||
self.session.server_address = dc.ip_address
|
self.session.server_address = dc.ip_address
|
||||||
self.session.port = dc.port
|
self.session.port = dc.port
|
||||||
self.session.save()
|
self.session.save()
|
||||||
self.connect()
|
self.connect(device_model, system_version, app_version, lang_code)
|
||||||
|
|
||||||
except (RPCError, ConnectionError) as error:
|
except (RPCError, ConnectionError) as error:
|
||||||
# Probably errors from the previous session, ignore them
|
# Probably errors from the previous session, ignore them
|
||||||
|
@ -158,7 +141,9 @@ class TelegramBareClient:
|
||||||
def reconnect(self):
|
def reconnect(self):
|
||||||
"""Disconnects and connects again (effectively reconnecting)"""
|
"""Disconnects and connects again (effectively reconnecting)"""
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
self.connect()
|
# TODO Don't use these parameters
|
||||||
|
self.connect(
|
||||||
|
platform.node(), platform.system(), self.__version__, 'en')
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
|
|
|
@ -63,15 +63,22 @@ class TelegramClient(TelegramBareClient):
|
||||||
|
|
||||||
# region Initialization
|
# region Initialization
|
||||||
|
|
||||||
def __init__(self, session, api_id, api_hash, proxy=None):
|
def __init__(self, session, api_id, api_hash, proxy=None,
|
||||||
|
device_model=None, system_version=None,
|
||||||
|
app_version=None, lang_code=None):
|
||||||
"""Initializes the Telegram client with the specified API ID and Hash.
|
"""Initializes the Telegram client with the specified API ID and Hash.
|
||||||
|
|
||||||
Session can either be a `str` object (the filename for the loaded/saved .session)
|
Session can either be a `str` object (filename for the .session)
|
||||||
or it can be a `Session` instance (in which case list_sessions() would probably not work).
|
or it can be a `Session` instance (in which case list_sessions()
|
||||||
If you don't want any file to be saved, pass `None`
|
would probably not work). Pass 'None' for it to be a temporary
|
||||||
|
session - remember to '.log_out()'!
|
||||||
|
|
||||||
In the later case, you are free to override the `Session` class to provide different
|
Default values for the optional parameters if left as None are:
|
||||||
.save() and .load() implementations to suit your needs."""
|
device_model = platform.node()
|
||||||
|
system_version = platform.system()
|
||||||
|
app_version = TelegramClient.__version__
|
||||||
|
lang_code = 'en'
|
||||||
|
"""
|
||||||
|
|
||||||
if not api_id or not api_hash:
|
if not api_id or not api_hash:
|
||||||
raise PermissionError(
|
raise PermissionError(
|
||||||
|
@ -96,6 +103,16 @@ class TelegramClient(TelegramBareClient):
|
||||||
self._updates_thread_running = Event()
|
self._updates_thread_running = Event()
|
||||||
self._updates_thread_receiving = Event()
|
self._updates_thread_receiving = Event()
|
||||||
|
|
||||||
|
# Used on connection - the user may modify these and reconnect
|
||||||
|
self.device_model = \
|
||||||
|
device_model if device_model else platform.node()
|
||||||
|
|
||||||
|
self.system_version = \
|
||||||
|
system_version if system_version else platform.system()
|
||||||
|
|
||||||
|
self.app_version = app_version if app_version else self.__version__
|
||||||
|
self.lang_code = lang_code if lang_code else 'en'
|
||||||
|
|
||||||
# Cache "exported" senders 'dc_id: MtProtoSender' and
|
# Cache "exported" senders 'dc_id: MtProtoSender' and
|
||||||
# their corresponding sessions not to recreate them all
|
# their corresponding sessions not to recreate them all
|
||||||
# the time since it's a (somewhat expensive) process.
|
# the time since it's a (somewhat expensive) process.
|
||||||
|
@ -108,6 +125,13 @@ class TelegramClient(TelegramBareClient):
|
||||||
|
|
||||||
# region Connecting
|
# region Connecting
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
return super(TelegramClient, self).connect(
|
||||||
|
device_model=self.device_model,
|
||||||
|
system_version=self.system_version,
|
||||||
|
app_version=self.app_version,
|
||||||
|
lang_code=self.lang_code)
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
"""Disconnects from the Telegram server
|
"""Disconnects from the Telegram server
|
||||||
and stops all the spawned threads"""
|
and stops all the spawned threads"""
|
||||||
|
@ -193,14 +217,11 @@ class TelegramClient(TelegramBareClient):
|
||||||
|
|
||||||
# region Telegram requests functions
|
# region Telegram requests functions
|
||||||
|
|
||||||
def invoke(self, request, timeout=timedelta(seconds=5), updates=None):
|
def invoke(self, request, timeout=timedelta(seconds=5)):
|
||||||
"""Invokes (sends) a MTProtoRequest and returns (receives) its result.
|
"""Invokes (sends) a MTProtoRequest and returns (receives) its result.
|
||||||
|
|
||||||
An optional timeout can be specified to cancel the operation if no
|
An optional timeout can be specified to cancel the operation if no
|
||||||
result is received within such time, or None to disable any timeout.
|
result is received within such time, or None to disable any timeout.
|
||||||
|
|
||||||
The 'updates' parameter will be ignored, although it's kept for
|
|
||||||
both function signatures (base class and this) to be the same.
|
|
||||||
"""
|
"""
|
||||||
if not issubclass(type(request), MTProtoRequest):
|
if not issubclass(type(request), MTProtoRequest):
|
||||||
raise ValueError('You can only invoke MtProtoRequests')
|
raise ValueError('You can only invoke MtProtoRequests')
|
||||||
|
|
60
telethon_examples/auto_replier.py
Normal file
60
telethon_examples/auto_replier.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# Example demonstrating how to make an automatic replier
|
||||||
|
from telethon import TelegramClient
|
||||||
|
from telethon.tl.types import UpdateShortMessage, UpdateShortChatMessage
|
||||||
|
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
|
def get_config():
|
||||||
|
"""Returns (session_name, user_phone, api_id, api_hash)"""
|
||||||
|
result = {}
|
||||||
|
with open('../api/settings', 'r', encoding='utf-8') as file:
|
||||||
|
for line in file:
|
||||||
|
value_pair = line.split('=')
|
||||||
|
left = value_pair[0].strip()
|
||||||
|
right = value_pair[1].strip()
|
||||||
|
result[left] = right
|
||||||
|
|
||||||
|
return (
|
||||||
|
'../' + result.get('session_name', 'anonymous'),
|
||||||
|
result.get('user_phone'),
|
||||||
|
int(result.get('api_id')),
|
||||||
|
result.get('api_hash')
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Connection
|
||||||
|
user_id, user_phone, api_id, api_hash = get_config()
|
||||||
|
client = TelegramClient('session_id', api_id, api_hash)
|
||||||
|
client.connect()
|
||||||
|
|
||||||
|
if not client.is_user_authorized():
|
||||||
|
client.send_code_request(user_phone)
|
||||||
|
client.sign_in('+34600000000', input('Enter code: '))
|
||||||
|
|
||||||
|
number_of_auto_replies = int(input('Auto-reply how many times?: '))
|
||||||
|
|
||||||
|
|
||||||
|
# Real work here
|
||||||
|
def auto_reply_thread(update_object):
|
||||||
|
print(type(update_object), update_object)
|
||||||
|
return
|
||||||
|
'''
|
||||||
|
if isinstance(update_object, UpdateShortMessage):
|
||||||
|
if not update_object.out:
|
||||||
|
client.send_message()
|
||||||
|
|
||||||
|
print('[User #{} sent {}]'.format(
|
||||||
|
update_object.user_id, update_object.message))
|
||||||
|
|
||||||
|
elif isinstance(update_object, UpdateShortChatMessage):
|
||||||
|
if not update_object.out:
|
||||||
|
print('[Chat #{}, user #{} sent {}]'.format(
|
||||||
|
update_object.chat_id, update_object.from_id,
|
||||||
|
update_object.message))
|
||||||
|
'''
|
||||||
|
|
||||||
|
client.add_update_handler(auto_reply_thread)
|
||||||
|
while number_of_auto_replies > 0:
|
||||||
|
# A real application would do more work here
|
||||||
|
sleep(1)
|
Loading…
Reference in New Issue
Block a user