Commit Graph

997 Commits

Author SHA1 Message Date
Lonami Exo
89df481ae4 Make MessageChanged.Event inherit NewMessage.Event 2018-02-18 14:07:13 +01:00
Lonami Exo
b93e1b5f50 Add add_event_handler and deprecate add_update_handler 2018-02-18 13:29:05 +01:00
Lonami Exo
1179c9e21b Fix start not asking for password if needed 2018-02-18 12:17:02 +01:00
Lonami Exo
33fd6895d3 Use hachoir to determine audio and video metadata if possible
Closes #611
2018-02-17 13:01:12 +01:00
Lonami Exo
2bfe86cda1 Fix bot_token could not be specified alone on .start() 2018-02-17 12:32:30 +01:00
Lonami Exo
d581589313 Add missing UpdateShortChatMessage case on events.NewMessage 2018-02-17 11:40:38 +01:00
Lonami Exo
6d993af338 Move events chats and blacklist_chats into the base, reuse code 2018-02-17 11:29:16 +01:00
Lonami Exo
8718cf0e7e Reuse turning chats into a set of IDs and handle self case 2018-02-17 10:41:43 +01:00
Lonami Exo
83d9d1d78e Fix markdown parser not inverting delimiters dict 2018-02-16 20:30:19 +01:00
Lonami Exo
030f292203 Dump libssl bindings in favour of the new optional cryptg module 2018-02-16 18:24:44 +01:00
Lonami Exo
c11aefa95b Fix message entities being ignored by edit_message 2018-02-16 13:42:12 +01:00
Lonami Exo
8194288797 Update to v0.17.2 2018-02-15 22:43:07 +01:00
Lonami Exo
75d99fbb53 Fix HTML entity parsing failing when needing surrogates 2018-02-15 11:52:46 +01:00
Lonami Exo
178643d3a1 Periodically send getState even without disconnect (341fb38)
After some more tests, even if the server doesn't drop the
connection, it might also just stop sending updates at all.
2018-02-15 11:41:32 +01:00
Lonami Exo
196275e9c8 Add edit and delete shorthand methods to events.NewMessage 2018-02-15 11:35:12 +01:00
Lonami Exo
62c057a058 Add edit_message convenience method and refactor to accomodate it 2018-02-15 11:19:34 +01:00
Lonami Exo
80f918956a Revert "official apps must be obfuscated" (29471f3)
It didn't really make any sense and @danog keeps changing it.
2018-02-15 10:02:12 +01:00
Dmitry D. Chernov
55bcc29ae0 Errors: Fix passing 'self' to the constructors of the superclasses
This is necessary only if the superclass name is specified explicitly instead of super() call.
2018-02-14 17:09:22 +10:00
Lonami Exo
08b9d7c4ef Add more logic to better retrieve input_sender on events 2018-02-13 10:24:35 +01:00
Lonami Exo
c83638ed0e Add further logging calls to better spot lost requests 2018-02-12 13:40:00 +01:00
Lonami Exo
9abeefac7f Send video files as video by default instead as document (#601) 2018-02-12 10:33:51 +01:00
Lonami Exo
0633e204c2 Fix whitelisting multiple chats on events not working 2018-02-11 10:30:45 +01:00
Lonami Exo
eca1e8ec87 Default to markdown parse mode on send_message
This is consistent with official clients and also provide
the expected result when replying to NewMessage events.
2018-02-10 10:45:55 +01:00
Lonami Exo
7d8d86c5f1 Support inline mentions (bot API style or username/phone) 2018-02-10 10:30:31 +01:00
Lonami Exo
6240677831 Fix sign up method not accepting integer codes 2018-02-09 19:39:20 +01:00
Lonami Exo
6261affaa1 Update to v0.17.1 2018-02-09 17:16:28 +01:00
Lonami Exo
14389a0ef2 Better document the events module 2018-02-09 15:56:42 +01:00
Lonami Exo
5167754368 Fix input_sender events' property not using cached value 2018-02-09 13:10:02 +01:00
Lonami Exo
f5eda72329 Add a new Raw Event 2018-02-09 13:08:09 +01:00
Lonami Exo
8786a52257 Add a new MessageChanged Event 2018-02-09 13:05:34 +01:00
Lonami Exo
ffe826b35f Add a new UserUpdate Event 2018-02-09 12:45:40 +01:00
Lonami Exo
379c775558 Add a new ChatAction Event 2018-02-09 11:37:17 +01:00
Lonami Exo
510bbf0fc8 Create a more reusable Event base class 2018-02-09 11:36:41 +01:00
Lonami Exo
91ba50174a Provide easier access to media through NewMessage event 2018-02-08 19:43:15 +01:00
Lonami Exo
c79fbe451f Fix NewMessage event not dropping MessageService 2018-02-07 14:06:36 +01:00
Lonami Exo
2e0a8d6bce Add respond and reply methods to the NewMessage event 2018-02-07 13:55:41 +01:00
Lonami Exo
dc43757cff Don't access NewMessage properties when building the event 2018-02-07 13:55:25 +01:00
Lonami Exo
9c09233b4f Make NewMessage's input chat/sender actual Input* if possible 2018-02-07 13:45:17 +01:00
Lonami Exo
ef837b1a53 Add a NewMessage event to handle incoming messages 2018-02-07 10:42:40 +01:00
Lonami Exo
5ec984dd82 Allow adding events with the client.on decorator 2018-02-07 10:41:58 +01:00
Lonami Exo
06bc761a5b Update to v0.17 2018-02-03 16:03:17 +01:00
Lonami Exo
fd08d53253 Trust the server will not send duplicates
This change was also suggested by the test on the previous commit.
2018-02-03 15:42:43 +01:00
Lonami Exo
341fb38136 Invoke getState after the server kicks us idling for updates
For some reason, the server seems to kick us after 1024 items from
the network are received. Tested with the following code, 1022
updates were received, after BadServerSalt, NewSessionCreated and
MsgsAck:

    client = TelegramClient(..., spawn_read_thread=False)
    client.connect(_sync_updates=False)
    sender = client._sender
    client = None
    while True:
        try:
            sender.receive(None)
        except TimeoutError:
            pass
        except ConnectionResetError:
            sender.connect()

If one were to run this code after being kicked no further items
will be retrieved and it will always timeout. Invoking a ping has
no effect either. Invoking some "high level" request like getState
seems to do the trick.
2018-02-03 15:39:37 +01:00
Lonami Exo
eefd37c2d7 Stop calling .disconnect() from .__del__()
It was causing some strange behaviour with the synchronized Queue
used by the UpdateState class. Calling .get() with any timeout
would block forever. Perhaps something else got released when
the script ended and then any call would block forever, thus the
thread never joining.
2018-02-03 12:15:38 +01:00
Lonami Exo
2ffe2b71dc Except OSError with errno.WSAEACCES when connecting
"OSError: [WinError 10013] An attempt was made to access a
socket in a way forbidden by its access permissions."
2018-02-03 11:44:05 +01:00
Lonami Exo
cf21808118 Raise error on .get_entity() on non-joined invite link 2018-02-02 17:24:12 +01:00
Lonami Exo
fbd53e2126 Override TLObject's __eq__ and __ne__ methods 2018-02-01 12:10:03 +01:00
Lonami Exo
add122bfe7 Support signing up through .start() 2018-02-01 10:12:57 +01:00
Lonami Exo
d5a91c7273 Don't set session to None on .log_out() 2018-02-01 09:39:41 +01:00
Birger Jarl
c8bbbe3e3c Save session data when migrating from JSON (#570) 2018-01-31 21:01:53 +01:00
Lonami Exo
bf56d32118 Add missing FutureSalts response special case (#81) 2018-01-30 18:32:42 +01:00
Lonami Exo
700b4c3169 Fix-up #565 with some rewording/behaviour changes
Such as not waiting unless strictly needed and better wording.
2018-01-27 21:37:57 +01:00
Matteo
067006d248 Add batch_size and wait_time to get_message_history (#565) 2018-01-27 21:29:38 +01:00
frizzlywitch
3b8365f871 Remove square braces from IPv6 addresses (#561) 2018-01-26 14:38:13 +01:00
Lonami Exo
43a3f40527 Properly close the sqlite3 connection (#560) 2018-01-26 09:59:49 +01:00
Lonami Exo
5c2dfc17a8 Make timeout logging message debug to scare people less 2018-01-25 18:44:21 +01:00
Lonami Exo
4a83784fe8 Simplify TLObject.pretty_format since Telegram returns no dicts 2018-01-25 09:51:12 +01:00
Lonami Exo
2873dcf1c6 Add '_' key to TLObject's .to_dict() and remove recursive param
Closes #559
2018-01-25 09:44:07 +01:00
Lonami Exo
db698858e0 Except TypeNotFoundError on ._invoke() 2018-01-23 22:26:19 +01:00
Lonami Exo
6c73538bd4 Fix time_offset not being used at all after BadMsgNotification
Telegram would refuse to reply any further unless the message ID
had the correct time (causing some behaviour like .connect()
never connecting, due to the first request being sent always
failing). The fix was to use time_offset when calculating the
message ID, while this was right, it wasn't in use.
2018-01-23 11:39:43 +01:00
Lonami Exo
32b92b32a7 Update .send_file() documentation (for f0eb41b) 2018-01-23 12:13:03 +01:00
Lonami Exo
58d90e7e34 Fix .download_media() not accepting Document 2018-01-23 12:10:23 +01:00
Lonami Exo
81c95b5a60 Fix recursive .get_input_media() forgetting parameters 2018-01-23 12:04:35 +01:00
Lonami Exo
f0eb41b902 Accept message/media on .send_file, remove redundancy off README 2018-01-23 11:59:35 +01:00
Tulir Asokan
5f2f04c6c2 Add HTML parse mode (#554) 2018-01-22 10:06:11 +01:00
Lonami Exo
abe26625e6 Add missing ResolvedPeer, InputNotifyPeer, TopPeer cases 2018-01-21 11:04:46 +01:00
Lonami Exo
f1371c3999 Early return from Session.get_input_entity() if Input* given 2018-01-20 19:39:48 +01:00
Lonami Exo
86816a3bdf Add missing InputChannel case on .get_input_peer() 2018-01-20 19:29:05 +01:00
Lonami Exo
b716c4fe67 Several documentation enhancements and build warnings fixes
- Made the documentation even more friendly towards newbies.
- Eased the usage of methods like get history which now set
  a default empty message for message actions and vice versa.
- Fixed some docstring documentations too.
- Updated the old normal docs/ to link back and forth RTD.
- Fixed the version of the documentation, now auto-loaded.
2018-01-20 11:47:17 +01:00
Lonami Exo
4d4e81e609 Fix cyclic imports on Python 3.4 by moving Session one level up 2018-01-19 22:55:28 +01:00
Lonami Exo
519c113b58 Update to v0.16.2 2018-01-19 21:17:57 +01:00
Lonami Exo
e3c56b0d98 Reduce autocast overhead as much as possible
Rationale: if the user is doing things right, the penalty for
being friendly (i.e. autocasting to the right version, like
User -> InputPeerUser), should be as little as possible.

Removing the redundant type() call to access .SUBCLASS_OF_ID
and assuming the user provided a TLObject (through excepting
whenever the attribute is not available) is x2 and x4 times
faster respectively.

Of course, this is a micro-optimization, but I still consider
it's good to benefit users doing things right or avoiding
redundant calls.
2018-01-19 13:00:17 +01:00
Lonami Exo
33e50aaee1 Reuse .on_response/.__str__/.stringify, override iff necessary 2018-01-19 12:12:52 +01:00
Lonami Exo
f6d98a61cf Add stub .get_input_entity() to TelegramBareClient
.resolve() calls should now work even if the subclass isn't in use.
2018-01-19 11:52:44 +01:00
Lonami Exo
1c9fa76ede Add new method to .resolve() parameters instead on init
TLObject's __init__ used to call utils.get_input_* methods and
similar to auto-cast things like User into InputPeerUser as
required. Now there's a custom .resolve() method for this purpose
with several advantages:
- Old behaviour still works, autocasts work like usual.

- A request can be constructed and later modified, before the
  autocast only occured on the constructor but now while invoking.

- This allows us to not only use the utils module but also the
  client, so it's even possible to use usernames or phone numbers
  for things that require an InputPeer. This actually assumes
  the TelegramClient subclass is being used and not the bare version
  which would fail when calling .get_input_peer().
2018-01-19 11:47:45 +01:00
Lonami Exo
b546c02210 Return a custom class for sized InputFile instead extra attrs 2018-01-18 20:09:59 +01:00
Lonami Exo
0e4611a593 Properly implement InputPhoto/InputDocument caching
Since uploading a file is done on the TelegramClient, and the
InputFiles are only valid for a short period of time, it only
makes sense to cache the sent media instead (which should not
expire). The problem is the MD5 is only needed when uploading
the file.

The solution is to allow this method to check for the wanted
cache, and if available, return an instance of that, so to
preserve the flexibility of both options (always InputFile,
or the cached InputPhoto/InputDocument) instead reuploading.
2018-01-18 19:36:47 +01:00
Lonami Exo
7e707dbbd9 Fix using enum on sqlite instead its value 2018-01-18 19:35:46 +01:00
Lonami Exo
1a3feec481 Move upload/download file methods to the TelegramClient 2018-01-18 13:55:03 +01:00
Lonami Exo
55efb2b104 Use a different schema for file cache which actually persists
Caching the inputFile values would not persist accross several
days so the cache was nearly unnecessary. Saving the id/hash of
the actual inputMedia sent is a much better/persistent idea.
2018-01-18 09:52:39 +01:00
Lonami Exo
428abebed8 Fix sending albums failing on invalid cache 2018-01-17 13:29:08 +01:00
Lonami Exo
bfe9378054 Fix .send_file failing with strings (as they are iterable) 2018-01-17 13:28:56 +01:00
Lonami Exo
fde0d60f72 Update old interactive example (#546) 2018-01-16 18:36:50 +01:00
Lonami Exo
49f204c955 Fix .get_input_media using None caption and missing venue type 2018-01-16 14:04:12 +01:00
Lonami Exo
36e2101910 Allow sending multiple files as album (closes #455) 2018-01-15 18:15:30 +01:00
Lonami Exo
494c90af69 Fix uploaded files cache may have expired 2018-01-15 12:36:46 +01:00
Lonami Exo
00859d52c3 Ask for the phone on start only if required 2018-01-15 09:48:37 +01:00
Lonami Exo
8be7e76b74 Use the idling state instead checking if read thread is present
This caused some multithreading bugs, for instance, when there was
no read thread and the main thread was idling, and there were some
update workers. Several threads would try to read from the socket
at the same time (since there's no lock for reading), causing
reads to be corrupted and receiving "invalid packet lengths"
from the network. Closes #538.
2018-01-14 21:20:22 +01:00
Lonami Exo
c5e969d585 Add more useful logging on invalid packet length received 2018-01-13 19:26:45 +01:00
Lonami Exo
0d429f55c5 Fix asking for phone on .start() 2018-01-13 12:00:53 +01:00
Lonami Exo
77301378f8 Make .start() more friendly by asking phone if not given
Ping #530
2018-01-13 11:55:12 +01:00
Lonami Exo
1fd20ace2c Update to v0.16.1 2018-01-11 22:18:58 +01:00
Lonami Exo
77ef659cbf Clearer error when invoking without calling .connect() (#532) 2018-01-11 15:42:27 +01:00
Joscha Götzer
80f81fe69a Added .start() convenience method to quickly connect/authorize (#528) 2018-01-11 12:43:46 +01:00
Lonami Exo
eaef392a9b Add and except missing FLOOD_TEST_PHONE_WAIT_X error 2018-01-10 17:34:34 +01:00
Lonami Exo
8038971753 Add clear_mentions parameter to .send_read_acknowledge() 2018-01-10 12:50:49 +01:00
Lonami Exo
045f7f5643 Assert hash is not None when migrating from JSON sessions 2018-01-10 10:46:43 +01:00
Lonami Exo
01820c9943 Associate phone code hash with phone (so phone can change) 2018-01-08 14:18:36 +01:00
Lonami Exo
c12af5e412 Remove references to the wiki 2018-01-08 14:04:04 +01:00
Nikola Vlahović
0c3216cb36 Fix channel check issue on send_read_acknowledge (#526) 2018-01-08 12:46:47 +01:00
Lonami Exo
46b088d44c Also handle ECONNREFUSED on .connect() (report on #392) 2018-01-08 12:26:32 +01:00
Lonami Exo
3c686fecdf Avoid more cyclic imports on the session file 2018-01-08 12:14:03 +01:00
Lonami Exo
f4182376f1 Move utils.calc_msg_key into auth_key (cyclic imports py3.4) 2018-01-08 12:07:14 +01:00
Lonami Exo
59a1a6aef2 Stop working with bytes on the markdown parser 2018-01-07 16:19:41 +01:00
Lonami Exo
34fe150096 Save only one auth_key on the database again 2018-01-07 00:38:30 +01:00
Lonami Exo
d81dd055e6 Remove temporary connections and use a lock again
These seem to be the reason for missing some updates (#237)
2018-01-06 23:45:22 +01:00
Lonami Exo
7745b8e7ee Use without rowid only if supported (closes #523) 2018-01-06 19:35:24 +01:00
Lonami Exo
f357d00911 Assert user/channel ID is non-zero too for #392 2018-01-06 15:54:27 +01:00
Lonami Exo
6f690945f1 Add a few security checks when unpacking messages from server
Also delete MtProto 1.0 leftovers.
2018-01-06 02:03:23 +01:00
Lonami Exo
3eafe18d0b Implement MtProto 2.0 (closes #484, thanks @delivrance!)
Huge shoutout to @delivrance's pyrogram, specially this commit:
pyrogram/pyrogram/commit/42f9a2d6994baaf9ecad590d1ff4d175a8c56454
2018-01-06 01:55:11 +01:00
Lonami Exo
4871a6fb96 Accept 'me' and 'self' usernames to get self user entity 2018-01-05 19:51:44 +01:00
Lonami Exo
ec4ca5dbfc More consistent with asyncio branch (style/small fixes)
Like passing an extra (invalid) dt parameter when serializing
a datetime, and handling more errors in the TcpClient class.
2018-01-05 18:31:48 +01:00
Lonami Exo
c4e26c95f5 Always cache files smaller than 10MB, now in the database
This removes the need for a .clear_cache() method as now files
are identified by their MD5 (which needs to be calculated
always) and their file size (to make collisions even more
unlikely) instead using the file path (which can now change).
2018-01-05 15:33:25 +01:00
Lonami Exo
a489b4b18b Clean up some more twirks on RTD and update docstrings 2018-01-05 13:30:21 +01:00
Lonami Exo
6cb5931e7a Call .disconnect() on client.__del__ for convenience 2018-01-04 23:37:47 +01:00
Lonami Exo
b45b63d71d Assert ._first_request is True with None auth_key (#517) 2018-01-04 21:07:29 +01:00
Lonami Exo
4fba27dee9 Accept InputFile/InputFileBig on .upload_file for 2c437c51
Now an input file thumbnail can also be specified, instead
needing to reupload the file every time.
2018-01-04 15:33:48 +01:00
Csaba Henk
2c437c51bb client: add thumbnail support for send_file() 2018-01-04 12:17:47 +01:00
Csaba Henk
78871b697e client: return the message in send_file, too 2018-01-04 12:17:47 +01:00
Lonami Exo
33d6afa0bd Add missing L74 hash parameter to .get_message_history() 2018-01-03 19:18:24 +01:00
Lonami Exo
cbf6306599 Fix early cast to input from 932ed9e causing error on Peer 2017-12-29 22:07:16 +01:00
Lonami Exo
d2121c76cb Fetch and persist each auth_key per DC 2017-12-29 19:41:12 +01:00
Lonami Exo
0570c55120 Remove hardcoded database version from session sql statement 2017-12-29 00:43:52 +01:00
Lonami Exo
47b53ce89f Except only UnicodeDecodeError to check migration (fix #511) 2017-12-28 17:06:14 +01:00
Lonami Exo
4a139b0ae4 Fix session table may be empty if no DC switch 2017-12-28 14:58:42 +01:00
Lonami Exo
50d413b1c9 Fix slicing dialogs was turning UserList into list 2017-12-28 14:55:02 +01:00
Lonami Exo
55b67b65a1 Remove optional add_mark parameter from .get_peer_id
It was always True after all, and it made no sense for it to
be False.
2017-12-28 13:31:43 +01:00
Lonami Exo
7ed3be8e6f Fix .get_dialogs() failing due to IDs being marked
Also removed utils.find_user_or_chat to prevent this from
happening again. Using a dict {marked_id: entity} is better.
2017-12-28 13:21:35 +01:00
Lonami Exo
c23c0a557a Update to v0.16 2017-12-28 12:43:50 +01:00
Lonami Exo
3537e9bcc9 Support more types to represent a date 2017-12-28 12:32:16 +01:00
Lonami Exo
75a342e24b Fix .download_media() not handling Photo (closes #473) 2017-12-28 12:11:31 +01:00
Lonami Exo
bfff1567af Fix up some mismatching raise/except types since 6ec6967 2017-12-28 11:55:05 +01:00
Lonami Exo
459022bdab Return a UserList with a .total attribute for get dialogs/history 2017-12-28 11:49:35 +01:00
Lonami Exo
0755bda220 Stop returning tuples off .get_message_history()
Now the information is saved in the modified Message instances,
which makes it easier to use (message.sender, message.to...)
2017-12-28 02:01:22 +01:00
Lonami Exo
52a4ef82f4 Merge branch 'master' of github.com:LonamiWebs/Telethon 2017-12-28 01:17:30 +01:00
Lonami Exo
b35fc075e0 Merge branch 'sqlite-session' 2017-12-28 01:15:12 +01:00
Lonami Exo
2a10f31511 Always wrap init connection for first call
Ping @delivrance.
See https://core.telegram.org/api/invoking#saving-client-info.
2017-12-28 01:13:24 +01:00
Lonami Exo
ab07f0220a Save dc_id instead layer and salt in the session file
Server salts change every 30 minutes after all, so keeping them
in the long-term storage session file doesn't make much sense.

Saving the layer doesn't make sense either, as it was only used
to know whether to init connection or not, but it should be done
always.
2017-12-28 01:06:27 +01:00
Dmitry D. Chernov
6ec6967ff9 Make exception types correspond to Python docs 2017-12-28 09:48:02 +10:00
Lonami Exo
1a746e1464 Fix .download_profile_photo() for some channels (closes #500) 2017-12-28 09:48:02 +10:00
Lonami Exo
166d5a4012 Fix .get_dialogs() being inconsistent with the return type 2017-12-28 09:48:01 +10:00
Dmitry D. Chernov
b252468ca2 TelegramBareClient: Add set_proxy() method
This allows to change proxy without recreation of the client instance.
2017-12-28 09:48:01 +10:00
Lonami Exo
b1b3610c1f Add missing self to .set_proxy (fa64a5f) 2017-12-28 00:09:29 +01:00
Lonami Exo
bdd63b91a2 Fix .download_profile_photo() for some channels (closes #500) 2017-12-27 23:54:31 +01:00
Lonami Exo
292e4fc29f Fix .get_dialogs() being inconsistent with the return type 2017-12-27 23:46:06 +01:00
Dmitry D. Chernov
fa64a5f7b8 TelegramBareClient: Add set_proxy() method
This allows to change proxy without recreation of the client instance.
2017-12-28 07:50:49 +10:00
Dmitry D. Chernov
a5b1457eee TelegramBareClient: Fix lost #region 2017-12-28 07:33:25 +10:00
Lonami Exo
f3d47769df Fix .send_read_acknowledge() for channels (#501) 2017-12-27 15:26:23 +01:00
Lonami Exo
21e5f0b547 Fix GetUsersRequest has a limit of 200 2017-12-27 15:08:29 +01:00
Birger Jarl
73edb0f4ff Avoid using None dates on file download (#462) 2017-12-27 14:52:33 +01:00
Lonami Exo
f29ee41f6c Don't use rowid for the entities table 2017-12-27 13:27:54 +01:00
Lonami Exo
932ed9ea9d Cast to input peer early on get input entity and close cursor 2017-12-27 13:06:03 +01:00
Lonami Exo
843e777eba Simplify .process_entities() flow 2017-12-27 12:58:50 +01:00
Lonami Exo
f8745155ac Stop joining read thread on disconnect, as it may be None 2017-12-27 12:37:07 +01:00
Lonami Exo
f96d88d3b5 Modify .get_entity to support fetching many entities at once 2017-12-27 12:36:38 +01:00
Lonami Exo
3512028d0f Fix .get_input_entity excepting wrong type 2017-12-27 12:36:14 +01:00
Lonami Exo
b6b47d175c Fix username.lower() on instances with username field but None 2017-12-27 12:16:49 +01:00
Lonami Exo
5c17097d8d Clean up .get_entity and remove force_fetch 2017-12-27 11:56:05 +01:00
Lonami Exo
86429e7291 Lowercase usernames before adding them to the database 2017-12-27 11:54:08 +01:00
Lonami Exo
aef96f1b68 Remove custom EntityDatabase and use sqlite3 instead
There are still a few things to change, like cleaning up the
code and actually caching the entities as a whole (currently,
although the username/phone/name can be used to fetch their
input version which is an improvement, their full version
needs to be re-fetched. Maybe it's a good thing though?)
2017-12-27 00:50:09 +01:00
Lonami Exo
0a4849b150 Small cleanup of the Session class 2017-12-26 16:59:30 +01:00
Lonami Exo
664417b409 Use sqlite3 instead JSON for the session files 2017-12-26 16:45:47 +01:00
Tanuj
c218df87d7 Remove reference to README.rst (#504) 2017-12-25 17:26:29 +01:00
Lonami Exo
238198db5a Create a convenient class to wrap Dialog instances 2017-12-24 16:18:09 +01:00
Dmitry D. Chernov
fb9813ae61 TelegramClient.send_code_request(): Change logic of methods invocation
Before:
  First call, force_sms=False: SendCodeRequest
  Next call, force_sms=False: SendCodeRequest
  First call, force_sms=True: raise ValueError
  Next call, force_sms=True: ResendCodeRequest

That's inconvenient because the user must remember whether the code requested at all and whether the request was successful.
In addition, the repeated invocation of SendCodeRequest does nothing.

This commit changes logic to this:
  First call, force_sms=False: SendCodeRequest
  Next call, force_sms=False: ResendCodeRequest
  First call, force_sms=True: SendCodeRequest, ResendCodeRequest
  Next call, force_sms=True: ResendCodeRequest
2017-12-24 21:25:17 +10:00
Dmitry D. Chernov
4a2a64ce2f TcpClient: Catch ConnectionError instead of its particular cases
That can be more reliable, especially in the case of using PySocks.
2017-12-23 05:45:23 +10:00
Lonami Exo
992017ddf8 Except ConnectionAbortedError on TcpClient 2017-12-22 11:27:57 +01:00
Lonami Exo
23ab70fc29 Remove unused request_msg_id from the TLObject class 2017-12-20 17:48:41 +01:00
Lonami Exo
c848ae0ace Move tgread_object() outside specific msg processing calls 2017-12-20 17:45:40 +01:00
Lonami Exo
5842d3741b Make a proper use of the logging module 2017-12-20 12:47:39 +01:00
Lonami Exo
7d189119f4 Fix salt migration failing with valid signed salts 2017-12-20 12:47:39 +01:00
Lonami Exo
0e0bc6ecbc Fix session ID is also signed since d4d7aa9 2017-12-07 12:22:40 +01:00
Lonami Exo
1d19bb22a5 Don't ignore NewSessionCreated salt 2017-12-04 20:34:35 +01:00
Lonami Exo
d4d7aa9063 Use signed salt 2017-12-03 21:10:22 +01:00
Lonami Exo
6662f49bcb Remove another redundant if 2017-11-30 21:10:02 +01:00
Lonami Exo
21a93d58ec Use a synchronized queue instead event/deque pair 2017-11-30 21:09:34 +01:00
Lonami Exo
7d7b2cb1fa Remove redundant checks from UpdateState 2017-11-30 20:40:35 +01:00
Lonami Exo
9046b46fcd Document the network/ module 2017-11-30 13:21:01 +01:00
Lonami Exo
605c103f29 Add unparse markdown method 2017-11-26 17:16:59 +01:00
Lonami Exo
57a70d0d47 Document the extensions/ module 2017-11-26 17:14:28 +01:00
Lonami Exo
71eb542626 Document the errors/ module 2017-11-26 17:06:09 +01:00
Lonami Exo
a932fb6470 Document the crypto/ module 2017-11-26 16:57:40 +01:00
Lonami Exo
74ec6391d9 Fix-up security assertion (b42b4bb for #453) 2017-11-24 19:05:52 +01:00
Maxim Smirnov
b42b4bb326 Add OpenSSL assertion on authenticator.py (#453)
aes_ige.c(88): OpenSSL internal error, assertion failed
2017-11-24 18:47:36 +01:00
Dmitry D. Chernov
5a4d6d4a57 tlobject: Represent timestamp as 'int' instead of 'float' 2017-11-23 22:39:35 +10:00
Dmitry D. Chernov
f99d14558f binary_reader: Parse TL 'date' to UTC datetime instead of local 2017-11-23 02:06:43 +10:00
Lonami Exo
152856dfbc Add a force_fetch parameter to .get_entity 2017-11-20 10:58:11 +01:00
Lonami Exo
9767774147 Fix import in markdown parser not being relative 2017-11-17 15:57:48 +01:00
Lonami Exo
01f55200f2 Update to v0.15.5 2017-11-16 19:18:26 +01:00
Lonami Exo
346c5bb303 Add method to md parser to extract text surrounded by entities 2017-11-16 19:13:13 +01:00
Lonami Exo
e5deaf5db8 Fix c4e07cf, md parsing adding unfinished entity at wrong offset 2017-11-16 19:07:53 +01:00
Lonami Exo
4ddbc78699 Ensure IPv6 addresses are surrounded by '[]' (#425) 2017-11-16 13:47:15 +01:00
Lonami Exo
edd73ed69a Allow switching from IPv4 to IPv6 and vice versa 2017-11-16 13:40:25 +01:00
Vladislav Kolesnichenko
ee5915e86d Add support for connecting through IPv6 (#425 for #112) 2017-11-16 13:30:18 +01:00
Lonami Exo
959e824c1c Reduce indent level to simplify flow on __call__ 2017-11-16 13:26:49 +01:00
Lonami Exo
778c844a64 Use logger.exception instead logger.error on ReadThread 2017-11-16 13:25:13 +01:00
Lonami Exo
b346561f89 Remove unnecessary call to .get_input_entity() 2017-11-16 13:24:32 +01:00
Lonami
48e96ca15f
Fix ._get_connected failing when .fileno() == 0 ( #427) 2017-11-14 12:01:33 +01:00
Lonami Exo
bfc408b00a Use NullHandler as default for the library 2017-11-13 10:59:43 +01:00
Lonami Exo
4ac88a1505 Use ._logger.exception when .connect fails (#373) 2017-11-13 10:58:10 +01:00
Lonami Exo
07cb001854 Attempt at cleaning up reconnection logic 2017-11-13 10:31:32 +01:00
Lonami Exo
f3e2887452 Add missing ChannelFull case to .get_peer_id() 2017-11-12 18:15:32 +01:00
Lonami Exo
08abef78d6 Add missing InputUserSelf case to .get_input_peer() 2017-11-12 18:05:01 +01:00
Andrey Egorov
84d48ef7bf Safer check to determine whether sockets are connected (#427) 2017-11-12 16:51:32 +01:00
Lonami Exo
99512875a2 Reconnect if invoking failed (#270) 2017-11-12 16:25:56 +01:00
Lonami Exo
5a57a8a498 Fix message history failing if sender fwd from channel
Closes #424
2017-11-11 19:35:57 +01:00
Lonami Exo
81baced12b Support t.me/ links when resolving usernames/joinchat links
Closes #419
2017-11-10 13:27:51 +01:00
Lonami Exo
c4e07cff57 Fix unfinished markdown delimiters being stripped away 2017-11-10 11:44:27 +01:00
Lonami Exo
cb3f20db65 Clean up markdown parsing since tuples aren't used anymore 2017-11-10 11:41:49 +01:00
Lonami Exo
7d75eebdab Make markdown parser use only Telegram's MessageEntity's 2017-11-10 11:07:36 +01:00
Lonami Exo
cad1e883a6 Don't save full entities unless they have access_hash 2017-11-10 09:32:40 +01:00
Lonami Exo
f65322af18 Fix entity database not using the phone on {phone: id}
Closes #412
2017-11-07 10:15:55 +01:00
Lonami Exo
83af705cc8 Add more comments to the markdown parser 2017-11-06 11:32:40 +01:00
Lonami Exo
3a2c3a9497 Fix URL regex for markdown was greedy (fix-up) 2017-11-06 11:22:58 +01:00
Lonami Exo
07ece83aba Fix overlapping markdown entities being skipped 2017-11-06 10:37:22 +01:00
Lonami Exo
4f80429215 Work on byte level when parsing markdown
Reasoning: instead encoding every character one by one as we
encounter them to use half their length as the correct offset,
we can simply encode the whole string at once as utf-16le and
work with that directly.
2017-11-06 10:29:32 +01:00
Viktor Oreshkin
49eb281251 Proper offset calculation for markdown (#407)
Dan suca
If Dan shared it with Traitor I'll not have to spend my time on this
Not a, sorry for not letting you sleep
k thx bye
Will this stay in history?
2017-11-06 00:17:22 +01:00
Lonami Exo
f381b26790 Add optional force_sms parameter to .send_code_request() 2017-11-04 20:46:02 +01:00
Lonami Exo
c8a0953f8e Update to v0.15.4 2017-11-04 13:40:56 +01:00
Lonami Exo
1741608f28 Use larger batches for .get_dialogs(limit=None) 2017-11-04 12:35:12 +01:00
Dan
0bfd8ff032 Add much faster integer factorization (#403 related to #199) 2017-11-03 12:59:17 +01:00
Lonami Exo
9a12738f0e Fix .get_message_history not working with limit=0 2017-10-31 13:52:43 +01:00
Lonami Exo
3d6c8915e3 Allow >100 limits when getting message history (implements #290) 2017-10-31 12:52:07 +01:00
Lonami
6c2363acd2
Merge pull request #396 from LonamiWebs/md-parsing
Support markdown again (implements  #118)
2017-10-30 11:19:48 +01:00
Lonami Exo
7e204632e2 Add parse_mode parameter to TelegramClient.send_message() 2017-10-30 11:17:22 +01:00
Lonami Exo
82cac4836c Fix markdown URL parsing using character index instead offset 2017-10-30 11:15:53 +01:00
Lonami Exo
0a14aa1bc6 Remove additional check when calculating emojies length
This special check treated some emojies as 3 characters long but
this shouldn't have actually been done, likely due to the old
regex matching more things as emoji than it should (which would
have count as 2 too, making up for 1+3 from the new is_emoji()).
2017-10-30 10:56:39 +01:00
Lonami Exo
05f7f076d5 Fix InputPeer* with None hash, drop them off database (closes #354) 2017-10-30 10:33:45 +01:00
Lonami Exo
05626c8274 Implement missing .to_dict() and .stringify() on message/container 2017-10-29 20:13:36 +01:00
Lonami Exo
6567f4b567 Clean .download_contact and a wrong indent level 2017-10-29 20:13:36 +01:00
Lonami Exo
2609bd9bd1 Use constants and allow empty URL regex when parsing markdown 2017-10-29 18:21:21 +01:00
Lonami Exo
d47a9f83d0 Fix some special cases which are not treated as emojis (offset 1) 2017-10-29 17:07:37 +01:00
Lonami Exo
bcaa8007a3 Fix inline URL matching swallowing all parse entities 2017-10-29 16:43:30 +01:00
Lonami Exo
f5fafc6a27 Enhance emoji detection 2017-10-29 16:41:30 +01:00
Lonami Exo
368269cb11 Add ability to parse inline URLs 2017-10-29 16:33:10 +01:00
Lonami Exo
9600a9ea0b Fix markdown parsing failing if delimiter was last character 2017-10-28 19:17:18 +02:00
Lonami Exo
5adec2e1ab Initial attempt at parsing Markdown-like syntax 2017-10-28 19:06:41 +02:00
Andrei Fokau
ef794bf75d Fix importing dependencies during installing (#384) 2017-10-28 12:21:07 +02:00
Lonami Exo
e48f15be80 Fix-up af08d59 (missing parenthesis) 2017-10-28 11:11:51 +02:00
Tanuj
af08d59cb7 Fix bug with semicolons when downloading contacts (#319) 2017-10-28 11:09:46 +02:00
Lonami Exo
c6d30ffceb Fix exception when logging exceptions 2017-10-25 13:06:51 +02:00
Lonami Exo
3db13ccdd2 Add a more descriptive error when serializing bytes 2017-10-25 12:43:57 +02:00
Lonami Exo
ceb37cd4c5 Move auth_key generation and InitConnection logic to .invoke()
The reasoning behind this is that .connect() should not call
any request at all, it should only connect to the servers
although it currently still calls GetStateRequest.

There were some issues (#291, #360) where the auth_key was None
(possibly due to .connect() returning False), so this may
fix some of the cases where it returned False. This way we also
ensure that we always have an auth_key, or even if it "breaks"
(it's not the right key for the server anymore).

A few additional changes have been introduced to accommodate
this, such as moving InitConnection logic too or importing auths.
2017-10-24 15:40:51 +02:00
Lonami Exo
d58c729af0 Add missing InputPeerSelf case to .get_input_user 2017-10-24 09:43:59 +02:00
Lonami Exo
b04eed82eb Add new .idle() method to listen for updates from MainThread 2017-10-22 13:16:34 +02:00
Andrey Egorov
8057cea294 Fix resending requests on bad salt/msg notification (#369)
These responses from the server could indicate container IDs,
which weren't being saved. This fix also accounts for that case.
2017-10-22 13:13:49 +02:00
Lonami Exo
5de8350d85 Reorder another import for #357 2017-10-22 11:23:15 +02:00
Lonami Exo
6759beac21 Add __str__ methods to TLMessage and MessageContainer 2017-10-21 20:23:53 +02:00
Lonami Exo
d7f917ebfc Update docstrings 2017-10-21 16:59:20 +02:00
Lonami Exo
7596f2b797 Fix and enhance "no workers set" warning 2017-10-21 13:48:57 +02:00
Lonami Exo
5cdf92e509 Update to v0.15.3 2017-10-20 23:33:08 +02:00
Lonami Exo
d70811b693 Fix infinite loop when invoking on update handlers (fix #336)
Every update that hadn't been acknowledged on the main connection
yet would be resent on any new connection. These new connections
are made temporary when invoking anything from any thread that's
not the main thread. It would also process all the updates, hence,
Telegram would be resending these not-acknowledged updates to the
temporary connection, and the updates would be processed again,
then the update handler would react to the duplicated updates over
and over.

To fix this, simply don't process updates on the temporary thread
at all. With this reasoning, if we don't acknowledge updates on
the temporary connections, Telegram will resend them on the main
connection, so we should not lose any.
2017-10-20 23:30:02 +02:00
Lonami Exo
2782a08ed0 Add note for future self when handling gzip packed data 2017-10-20 22:44:00 +02:00
Lonami Exo
1a91c024fc Revert 63dfb1e as many updates were being dropped 2017-10-20 22:12:03 +02:00
Lonami Exo
033119e9b8 Make MtProtoSender._need_confirmation a set
This will avoid adding duplicated items to it
2017-10-20 22:07:45 +02:00
Lonami Exo
38ccd6d1d9 Generate errors from PWRTelegram's API 2017-10-20 17:20:05 +02:00
Andrey Egorov
f37b9ed20e Fix new salt not being saved to session file (#362) 2017-10-20 16:48:54 +02:00
Andrey Egorov
050cd95d32 Remove unnecessary .disconnect() from ._invoke() (#356) 2017-10-19 10:51:34 +02:00
Andrey Egorov
e349910eb9 Fix attribute access order being swapped (#353) 2017-10-18 15:34:04 +02:00
Andrey Egorov
16cf94c9ad Fix ._clear_all_pending failing due to a wrong call (#352) 2017-10-18 14:47:03 +02:00
Lonami Exo
87dc476dae Fix ReadThread not starting on reconnect if already authorized 2017-10-18 14:45:08 +02:00
Lonami Exo
5a1074dc7c Avoid calling .sync_updates when not needed 2017-10-18 12:17:13 +02:00
Lonami Exo
adb79b21cf Replace .to_bytes() with the special .__bytes__ function 2017-10-17 19:54:59 +02:00
Lonami Exo
63dfb1e3ea Fix processing messages pending of acknowledge many times 2017-10-17 10:15:13 +02:00
Andrey Egorov
ed77ba6f8f Likely fix .log_out crashing "calling Event" (#349) 2017-10-17 00:39:04 +02:00
Lonami Exo
27728be242 Revert "Attempt at not calling .connect for every file chunk"
This reverts commit 280a700655.
The reason for this is that it was causing a lot of files to
be downloaded corrupted for some reason. This should be
revisited to avoid creating a new connection for every chunk.
2017-10-15 11:05:56 +02:00
Lonami Exo
d92e8e11ad Update to v0.15.2 2017-10-14 12:05:28 +02:00
Lonami Exo
280a700655 Attempt at not calling .connect for every file chunk 2017-10-14 12:03:01 +02:00
Nikolay
9907d763a8 Use peer as key instead top_message on .get_dialogs (fix #329) 2017-10-14 11:50:48 +02:00
Lonami Exo
f4b8772a85 Temporary fix for abusive duplicated updates (closes #336) 2017-10-14 11:37:47 +02:00
Lonami Exo
4fd9d361f0 Replace redundant isinstance calls with a tuple parameter 2017-10-13 11:39:34 +02:00
88ee55
db63b5e39a Fix .send_message not expecting UpdateNewChannelMessage (#331) 2017-10-13 10:53:36 +02:00
Lonami Exo
9cf5506ee4 Don't .disconnect() on FloodWaitError
Since other requests can still be invoked, it makes no
sense to call .disconnect().
2017-10-13 09:59:37 +02:00
Lonami Exo
bec5f9fb89 Add stub methods for more server responses 2017-10-12 21:09:09 +02:00
Lonami Exo
f2338e49ae Allow using a callable key on EntityDatabase 2017-10-12 19:54:23 +02:00
Lonami Exo
16a0cecf46 Fix EntityDatabase.__delitem__ 2017-10-12 19:47:13 +02:00
Lonami Exo
6242cc8159 Fix .tgread_object not seeking back on TypeNotFoundError 2017-10-12 18:52:04 +02:00
Lonami Exo
59c61cab2f Replace int.from_bytes with struct.unpack for consistency 2017-10-12 18:41:58 +02:00
Lonami Exo
bff2e6981e Fix ._pop_request_of_type failing on not-found requests 2017-10-12 18:03:10 +02:00
Lonami Exo
7bb7cb039f Fix handle RpcResult not always returning a bool 2017-10-12 17:58:37 +02:00
Lonami Exo
0c1170ee61 Replace hardcoded reads with TLObject's .read() 2017-10-12 16:40:59 +02:00
Lonami Exo
3a4662c3bf Remove forgotten print call from authenticator.py 2017-10-12 16:07:25 +02:00
Lonami Exo
301da16f29 Fix pong response not reading all data from the buffer 2017-10-11 21:09:09 +02:00
Lonami Exo
da51e71def Fix .get_input_entity returning marked IDs (closes #314) 2017-10-09 19:40:39 +02:00
Lonami Exo
db623e37fd Except ConnectionResetError on ._reconnect (fix #309) 2017-10-09 13:23:39 +02:00
Lonami Exo
e2ac18b7bc Use larger chunks when downloading/uploading files 2017-10-09 13:19:03 +02:00
Lonami Exo
a7622324dd Remove unnecessary offset_index variable on .download_file 2017-10-09 12:00:14 +02:00
Lonami Exo
6f1c05633e Join all threads when calling .disconnect() (fix #252) 2017-10-09 11:47:10 +02:00
Lonami Exo
f984aae391 Except ProxyConnectionError on ReadThread (fix #307) 2017-10-09 11:37:08 +02:00
Lonami Exo
2a1a4508b8 Allow overriding DocumentAttributes on .send_file (fix #294) 2017-10-09 11:20:31 +02:00
Lonami Exo
4673a02ce6 Stop calling .process_entities where not needed 2017-10-09 11:20:31 +02:00
Lonami Exo
401de913af Fix EntityDatabase failing with InputPeer keys 2017-10-09 11:20:31 +02:00
Joscha Götzer
4a482b3506 .get_drafts() and a custom Draft class (#310) 2017-10-09 09:54:48 +02:00
Lonami Exo
1f54cbfb5a Make str(TLObject) return valid code to generate it back 2017-10-08 17:51:29 +02:00
Lonami Exo
48c8837f19 Don't look on all dialogs on .get_entity miss 2017-10-08 16:25:50 +02:00
Lonami Exo
15e90dcb69 Allow specifying a threshold to handle flood waits 2017-10-08 16:15:30 +02:00
Lonami Exo
83677fc927 Enhance and use .get_input_photo on the generated code 2017-10-08 13:45:14 +02:00
Lonami Exo
62aec947c0 Chang auto-reconnect condition (fix #303) 2017-10-08 10:52:56 +02:00
Lonami Exo
244a47cddd Fix consuming all retries on Requests returning False/empty list 2017-10-07 18:54:30 +02:00
Joscha Götzer
7b5d409c49 Warn users on .add_update_handler if no workers are running (#300) 2017-10-07 17:55:37 +02:00