Commit Graph

485 Commits

Author SHA1 Message Date
Dan
195cd22ebb Better handling of reply and pin messages 2018-04-05 10:49:20 +02:00
Dan
a2590f3bc8 Don't return None
This will break Message Pin handling
2018-04-05 08:26:50 +02:00
Dan
fcf0e4515f Don't try to stop a non-started Client 2018-04-03 14:54:34 +02:00
Dan
10452dc545 Don't allow start() to be called more than once 2018-04-03 11:45:19 +02:00
Dan
e69fea4bb5 More readable exception handling 2018-04-03 11:40:08 +02:00
Dan
2f2a381686 Add extra GetDialogs step 2018-04-02 12:14:22 +02:00
Dan
b5304ca23a Use fully qualified channel id 2018-04-02 11:11:38 +02:00
Dan
21ab5295c4 Update first_name and last_name parameters' docs 2018-04-01 18:18:06 +02:00
Dan
fecea07db6 Document force_sms parameter 2018-04-01 18:17:20 +02:00
Dan
387bbbf090 Add new force_sms parameter to force Telegram sending the code via SMS 2018-04-01 17:38:22 +02:00
Dan
880eb28e9f Use double quotes 2018-03-30 22:41:34 +02:00
Dan
f1e1480c5a Only parse selected messages 2018-03-27 15:58:04 +02:00
Dan
91133812a7 Add support for service messages 2018-03-27 12:22:57 +02:00
Dan
527c5450d2 Extend support for pyrogram types 2018-03-26 20:00:25 +02:00
Dan
7447b77b25 Add initial support for pyrogram types 2018-03-26 15:17:00 +02:00
Dan
beaf88adee Remove imports, use namespaces 2018-03-26 13:41:00 +02:00
Dan
e397c4d181 Don't process empty differences 2018-03-26 13:34:54 +02:00
Dan
e680cce5fa Update docstrings 2018-03-25 22:12:52 +02:00
Dan
16eee1dabb Update docstrings 2018-03-25 21:59:04 +02:00
Dan
faa363fee8 Update docstrings 2018-03-25 21:41:19 +02:00
Dan
5bf64ac444 Don't process empty messages 2018-03-25 17:49:43 +02:00
Dan
bbe3a8a487 Set supports_streaming to True by default 2018-03-24 15:10:27 +01:00
Dan
813b7958e3 Remove token parameter 2018-03-24 15:02:03 +01:00
Dan
ef71dcf56a Remove **kwargs for generated classes (function/types) 2018-03-23 13:46:43 +01:00
Dan
1d9bb18a38 Only match full t.me/joinchat links 2018-03-23 12:59:03 +01:00
Dan
a9b1783910 Let api_key and proxy parameters override the config.ini file 2018-03-22 14:36:46 +01:00
Dan
f7ce3abc8d Merge branch 'min' 2018-03-21 17:47:02 +01:00
Dan
e464226608
Update docs 2018-03-21 17:39:53 +01:00
Dan
569ab1696a
Return the good looking absolute path instead of an ugly relative one #37 2018-03-21 16:17:13 +01:00
Eric Blundell
fa6af8695e Fix missing shutil import 2018-03-21 10:13:45 -05:00
Dan
40e7d72e87
Make paths good looking 2018-03-21 15:43:58 +01:00
Dan
76ad29ae11
Fix saving files on another drive (windows) @EriHoss 2018-03-21 15:42:32 +01:00
Dan
f6ea3e9b42
Cleaner code and some little changes
TODO: "" or None for faulty download, which is better?
2018-03-21 13:39:23 +01:00
Eric Blundell
0f4e29584a Make use of tempfile.NamedTemporaryFile in getfile, use context managers 2018-03-21 04:07:55 -05:00
Eric Blundell
b45960212b Simplify branch in download_worker exception handler 2018-03-21 03:19:09 -05:00
Dan
b6a42aa8cd
Do not mkstemp twice
Also use elif to make it less confusing
2018-03-21 09:01:18 +01:00
Eric Blundell
8796e857af Amend comment on shutil.move in download_worker
os.renames cannot move across drives/partitions on any platform.

that is why shutil.move is used, because the OS allotted temp file could
possibly be on another drive or partition.

Also fix code formatting on new import statements.
2018-03-20 23:20:08 -05:00
Eric Blundell
2cf2dd26f0
Merge branch 'master' into flexible_media_downloads 2018-03-20 22:28:42 -05:00
Eric Blundell
f0c00c8801 move first mkstemp to exception safe location in get_file 2018-03-20 16:30:48 -05:00
Eric Blundell
4c9e4df532 Amendment to comment on fdopen usage in get_file 2018-03-20 16:18:32 -05:00
Eric Blundell
cd0e585d0d Avoid calling fdopen on closed descriptor 2018-03-20 15:42:31 -05:00
Eric Blundell
5bc10b45a3 Use OS temp file, specific path download via path seperator inspection 2018-03-20 15:20:04 -05:00
Dan
aa8125d7a2 Log more info in case there is an exception in get_file #37 2018-03-20 19:27:25 +01:00
Dan
2b33f23990 Check whether get_file failed or not #37
If it failed, also delete any eventual temporary file
2018-03-20 19:25:23 +01:00
Eric Blundell
62831001b7 Slight amendment to client.download_(media/photo) doc 2018-03-20 09:39:58 -05:00
Eric Blundell
bd1234f227 fix open file leak in client.download_media 2018-03-20 09:02:17 -05:00
Eric Blundell
0694480a46 allow file objects be passed to file_name arg of client.download_media 2018-03-20 08:33:14 -05:00
Eric Blundell
db80c72b08 Create file_name directory trees in download_worker 2018-03-20 08:27:44 -05:00
Eric Blundell
c0212a7b10 Correct default file_dir value behaviour 2018-03-20 08:20:03 -05:00
Eric Blundell
19854a5d4f Actually raise mutually exclusive arg error 2018-03-20 08:10:24 -05:00
Eric Blundell
4ae9a5ad38 Make sure file_dir is created 2018-03-20 08:05:41 -05:00
Eric Blundell
b9f623921d Make file_name and file_dir mutually exclusive 2018-03-20 07:47:38 -05:00
Eric Blundell
6bb004fc83 Add file_dir parameter to client.download_media 2018-03-20 07:34:38 -05:00
Eric Blundell
19b1bbb942 Allow download_media to download media to anywhere
Remove the use of a temporary file in the programs
working directory.
2018-03-20 07:04:35 -05:00
Dan
17f7141278 Merge branch 'master' into min 2018-03-19 19:58:32 +01:00
Dan
2deea2e4a6 Remove unused imports 2018-03-19 03:38:09 +01:00
Dan
299d6aca5c Raise ConnectionError if client is not started 2018-03-19 03:37:43 +01:00
Dan
310f9080c4 Remove unnecessary method calls 2018-03-19 01:54:45 +01:00
Dan
eecc9412b5 Merge branch 'master' into min 2018-03-19 01:53:59 +01:00
Dan
0f2dc6c624 Remove unnecessary method calls 2018-03-19 01:53:07 +01:00
Dan
9e386ed24c Remove resolve_username method 2018-03-19 01:51:47 +01:00
Dan
70ae7f0808 Fix usernames not stored in lowercase 2018-03-19 01:40:36 +01:00
Dan
390b0c12e2 Set updates_workers to 1 2018-03-19 01:08:59 +01:00
Dan
c4142753d0 Handle minified channel updates 2018-03-19 01:08:34 +01:00
Dan
5b5fb6cbec Update docstrings to accommodate joinchat links 2018-03-18 13:00:28 +01:00
Dan
cbd3b71b79 Handle mismatches in a more pythonic way 2018-03-18 12:12:27 +01:00
Dan
1d25b84cde Update invite link regex pattern 2018-03-18 11:43:51 +01:00
Dan
b45f2f4595 Add support for sending messages using joinchat links and hashes 2018-03-17 19:24:27 +01:00
Dan
1da39efa2e Update invite link regex 2018-03-17 19:13:15 +01:00
Dan
600e705d51 Add docstrings for "token" parameter 2018-03-17 19:05:18 +01:00
Dan
839f7b99f4 Call GetState for bots 2018-03-15 20:41:13 +01:00
Dan
6d536107ae Add support for bots login via token 2018-03-15 12:25:29 +01:00
Dan
3b2d264f5e Fix reference link 2018-03-14 11:01:33 +01:00
Dan
7beb611cea Update docstrings 2018-03-14 10:59:35 +01:00
Dan
f997e97494 Add support for downloading photos not contained inside a Message 2018-03-13 16:26:53 +01:00
Dan
62e67f5257 Add get_messages method 2018-03-11 17:16:38 +01:00
Dan
ca54b62f63 Strip "+" away from phone numbers when logging in 2018-03-10 15:21:31 +01:00
Dan
f55062bc6d Add support for Bot API style basic group IDs (with minus sign)
Closes #32
2018-03-08 12:28:38 +01:00
Dan
859305b744 Update docstrings 2018-03-08 10:34:04 +01:00
Dan
27a96a0df4 Fix progress going over 100% 2018-03-08 10:31:34 +01:00
Dan
b5c7cf781a Document the progress parameter 2018-03-08 10:25:10 +01:00
Dan
6b6122be92 Add progress parameter 2018-03-08 10:23:48 +01:00
Dan
20ec656d91 Fix little typos 2018-03-08 10:11:47 +01:00
Dan
efd435befd
Use snake_case style 2018-03-08 10:09:03 +01:00
23rd
58eb19285e Added sending thumb with video. 2018-03-01 02:36:56 +03:00
Dan
536efa5f4a Add get_inline_bot_results and send_inline_bot_result methods 2018-02-27 14:50:43 +01:00
Dan
333c906ac3 Always fetch peers (when applicable) 2018-02-26 15:44:08 +01:00
Dan
bce7d5b6e8 Fix signal handler not working on Windows 2018-02-25 18:43:30 +01:00
Dan
64ebf979e5 Fix file extension 2018-02-25 14:30:17 +01:00
Dan
834fff88da Remove print 2018-02-25 14:22:18 +01:00
Dan
c088018afa Move send_media_group method 2018-02-24 17:46:40 +01:00
Dan
f7a3dc2c22 Add support for phone numbers in docstrings 2018-02-24 17:45:51 +01:00
Dan
09cba224cf Document download_media 2018-02-24 17:41:11 +01:00
Dan
0353cf9588 Add send_sticker method 2018-02-24 17:24:35 +01:00
Dan
ed4ff07742 Add support for progress callback when downloading media 2018-02-24 17:16:25 +01:00
Dan
2e4802fbda Add support for downloading photos 2018-02-23 14:42:50 +01:00
Dan
87bd61ecc2 Set log level to WARNING 2018-02-23 13:59:26 +01:00
Dan
9c9a034f66 Make sure to clean temp files 2018-02-22 14:13:59 +01:00
Dan
28f10bd042 Make sure it's a Contacts before accessing fields 2018-02-22 11:03:48 +01:00
Dan
cfa19bc1c8 Document add_contacts and delete_contacts 2018-02-21 13:44:47 +01:00
Dan
efbd052ec3 Add api_key and proxy parameter to the Client class
This gives users full control on how to store and load credentials.
2018-02-21 13:31:27 +01:00
Dan
2a9da07548 Catch FloodWaits when calling GetContacts 2018-02-20 17:00:25 +01:00
Dan
5a44b93574 Accept phone numbers with and without a leading "+" 2018-02-20 15:48:10 +01:00
Dan
c5281eb963 Add ability to send messages to contacts by using their phone numbers 2018-02-20 15:28:01 +01:00
Dan
c33719be9e Call get_contacts when starting the client 2018-02-20 15:06:12 +01:00
Dan
c99bc9118b Fetch users when getting contacts 2018-02-20 15:05:17 +01:00
Dan
3ff3f5d9f4 Rewrite add_contacts and delete_contacts 2018-02-20 15:03:35 +01:00
RussFP
7d72738153 add add_contacts, delete_contacts, get_contacts 2018-02-20 14:20:34 +03:00
Dan
027f843047 Fix deadlock in case the message doesn't contain any media 2018-02-19 13:43:16 +01:00
Dan
46e310722a Improve download_media 2018-02-19 13:11:35 +01:00
Dan
15561d19d5 Add initial support for downloading media 2018-02-18 18:11:33 +01:00
Dan
3bd3d99e6a Rewrite get_file 2018-02-18 15:03:33 +01:00
Dan
1bf74a9c25 Merge branch 'master' into tgcrypto 2018-02-16 18:42:43 +01:00
Dan
c7b800b478 Add supports_streaming field o the InputMedia.Video object 2018-02-15 21:55:57 +01:00
Dan
a961eb88db Update docstrings 2018-02-15 21:12:42 +01:00
Dan
e14a3644ba Merge branch 'master' into tgcrypto 2018-02-14 17:34:21 +01:00
Dan
11bf40f50b Add new parameter supports_streaming to send_video method 2018-02-14 15:50:24 +01:00
Dan
89200f4697 Add resolve_peer docstrings 2018-02-13 16:24:04 +01:00
Dan
78f2c9549c Modify resolve_peer to accommodate Peer* types 2018-02-13 14:28:45 +01:00
Dan
c6d5fb4178 Add much more detailed set_update_handler docstring 2018-02-13 13:56:09 +01:00
Dan
df89669e04 Revert back to "set_update_handler" name 2018-02-13 12:08:10 +01:00
Dan
8b7f7440b2 Remove reference 2018-02-12 16:39:57 +01:00
Dan
dc94386507 Handle pts 2018-02-11 13:19:52 +01:00
Dan
a6fce057c7 Pass update mentions to the event handler 2018-02-10 16:30:13 +01:00
Dan
f158b780aa Merge branch 'master' into tgcrypto 2018-02-09 03:27:13 +01:00
Dan
a0bd47fee4 Revamp get_dialogs. Fixes #13 2018-02-09 02:57:08 +01:00
Dan
b1064015f6 Update set_event_handler docstring 2018-02-09 01:54:47 +01:00
Dan
9a912192f0 Add fetch_peers method 2018-02-09 01:52:40 +01:00
Dan
0f45cacefa Update doctrings 2018-02-08 22:01:14 +01:00
Dan
646c821706 Rename update to event 2018-02-08 22:00:13 +01:00
Dan
07c3d96d82 Add Event Handler (for single updates) 2018-02-08 21:59:08 +01:00
Dan
d8edfb38bf Move update handler into Client 2018-02-08 20:46:47 +01:00
Dan
7cee6b079f Revert to fixed NET_WORKERS count 2018-02-08 19:48:01 +01:00
Dan
f8688cd260 Rename worker to net_worker 2018-02-08 18:56:40 +01:00
Dan
a2d435b25f Add filename attribute for single videos 2018-02-08 16:20:19 +01:00
23rd
ed449ece9b Add filename attribute to video files in albums (#19) 2018-02-08 16:17:23 +01:00
Dan
444b695284 Merge branch 'test' 2018-02-07 20:09:20 +01:00
Dan
403a37692c Handle GetDialogs FloodWait errors 2018-02-07 03:35:34 +01:00
Dan
6783d7b16f Fix reply_to_message_id parameter for send_message 2018-02-07 03:24:50 +01:00
Dan
0d359a4b1a Add docstrings 2018-02-07 03:21:36 +01:00
Dan
a358b1f26b Add send_media_group method 2018-02-07 03:05:02 +01:00
Dan
f31cfba94b Merge branch 'master' into tgcrypto 2018-02-03 13:26:53 +01:00
Dan
00a02472f5
Make PhoneNumberBanned error looking more gentle 2018-02-01 13:41:23 +01:00
RussFP
df5666e2a0 add PhoneNumberBanned exception to 'def authorize' 2018-02-01 12:49:43 +03:00
Dan
807a50b82c Pass the client to the update handler as parameter 2018-02-01 02:41:19 +01:00
Dan
2b7425019b Merge IGE and CTR into a single class (AES) 2018-01-28 01:44:38 +01:00
Dan
df5379b479 Rename chat_id to peer_id for internal usage 2018-01-26 15:22:07 +01:00
Dan
38fb4b8d2a Add support for Bot API channel/supergroup IDs starting with -100 2018-01-26 14:44:53 +01:00
Dan
b1f11b7a97 Update docstrings 2018-01-26 11:49:07 +01:00
Dan
7234edad5d Add ability to choose the amount of worker threads for the main session 2018-01-26 11:41:09 +01:00
Dan
16c5e63c8b Add resolve_username method 2018-01-25 16:41:59 +01:00
Dan
604fc7af71 Handle FirstnameInvalid error 2018-01-24 21:53:27 +01:00
Dan
e6fdc6a4e9 Update docstrings 2018-01-24 21:46:28 +01:00
Dan
ee41955db0 Set the password to None after successfully authorizing the user 2018-01-24 18:41:23 +01:00
Dan
5b7459cb71 Fix infinite loop in case a flood wait is triggered 2018-01-24 18:38:18 +01:00
Dan
a662c1734f Move GetPassword request outside the loop 2018-01-24 18:35:17 +01:00
Dan
f65d369fd1 Clean the code and add some more functionality:
- The phone_code can also be passed in advance (for test numbers).
- Pass first_name and last_name for automatic account creation.
- Handle PhoneCodeInvalid errors.
2018-01-24 17:53:30 +01:00
Lonami Exo
d01d852dc2 Support custom callbacks on Client.authorize() 2018-01-24 15:40:39 +01:00
Dan
ba0f5aa4d6 Update docstrings 2018-01-23 15:38:01 +01:00
Dan
84ae464b52 Add ParseMode module 2018-01-23 15:35:21 +01:00
Dan
e7cbff8087 Add optional parameter parse_mode 2018-01-23 15:18:52 +01:00
Dan
0e3d08ae75 Add HTML style parse mode 2018-01-22 00:26:43 +01:00
Dan
c7d2de3ee9 Force UTF-8 encoding when r/w'ing text files 2018-01-21 16:56:50 +01:00
Dan
ba3203865f Move starred expressions at the end 2018-01-20 19:40:09 +01:00
Dan
0f09989d67 Update docstrings 2018-01-20 16:01:23 +01:00
Dan
8cc0fe14da Add Cloud Password (two-step verification) support 2018-01-20 15:46:17 +01:00
Dan
8c88a69d81 Remove redundant escape characters 2018-01-20 14:45:13 +01:00
Dan
ea35fa2480 Update to Layer 75 2018-01-20 14:43:23 +01:00
Dan
789cffa4f7 Remove print call 2018-01-16 22:06:04 +01:00
Dan
ba21430512 Add SOCKS5 proxy support 2018-01-16 22:05:19 +01:00
Dan
155087e305 Set the update handler *after* fetching the dialogs 2018-01-15 13:44:29 +01:00
Dan
ca8e5679ee Update docstrings 2018-01-15 13:42:05 +01:00
Dan
3e83e4e565 Revert back to "|" 2018-01-15 13:10:44 +01:00
Dan
4250ac1760 Fix cross-reference 2018-01-15 11:57:16 +01:00
Dan
2911a64772 Add ability to delete messages on channels and supergroups 2018-01-12 20:52:43 +01:00
Dan
ead7573d33 Replace "|" with "or" 2018-01-08 06:34:49 +01:00
Dan
44d1679108 Add ability to export current links without revoking the old ones 2018-01-08 06:31:48 +01:00
Dan
75dbbaeaf5 Use concise names when cross-referencing, "type" is often implicit 2018-01-06 12:28:17 +01:00
Dan
b4fee5b5e0 Update docstrings 2018-01-04 03:02:55 +01:00
Dan
9bfe4b5058 Add type hinting in Client docstrings 2018-01-03 17:39:12 +01:00
Dan
d70c2bb564 Update copyright year 2018-01-01 13:24:07 +01:00
Dan
8be5351452 Add "Raises" section in docstrings 2017-12-30 19:23:18 +01:00
Dan
1df1762d54 Add docstrings for exposed classes and methods 2017-12-29 21:44:45 +01:00
Dan
4019693363 Add export_chat_invite_link method 2017-12-27 21:23:00 +01:00
Dan
e242f2a555 Add support for downloading files in different DCs 2017-12-27 20:59:37 +01:00
Dan
8a8e863598 Add edit_message_caption method 2017-12-26 18:50:57 +01:00
Dan
6b9a757ce7 Add delete parameter to delete the chat dialog 2017-12-25 13:02:14 +01:00
Dan
924302aed5 Fix get_dialogs not fetching some dialogs containing service messages 2017-12-25 12:51:03 +01:00
Dan
64fbcf2237 Add leave_chat method 2017-12-25 12:47:08 +01:00
Dan
c7f7825c92 Add join_chat method 2017-12-25 12:30:48 +01:00
Dan
aef1386a1a Accept usernames starting with "@" 2017-12-25 11:49:59 +01:00
Dan
9792ee902d Add get_user_profile_photos method 2017-12-23 13:34:06 +01:00
Dan
54fa3af4d5 Add initial support for photos download 2017-12-23 12:26:26 +01:00
Dan
0f2ef8e681 Add download support for non-CDN files 2017-12-20 16:21:56 +01:00
Dan
0fbc5e1a90 Add get_file method (to be refined) 2017-12-19 14:00:19 +01:00
Dan
bdc2ab6c73 Rewrite save_file to handle missing file parts 2017-12-18 14:41:32 +01:00
Dan
99a81ad1d6 Fix file uploading for Python < 3.5 2017-12-18 09:07:51 +01:00
Dan
53e74e34ad Call the proper logger 2017-12-17 13:52:57 +01:00
Dan
b6607fede0 Add idle mechanism to gently stop the program 2017-12-17 13:52:33 +01:00
Dan
32110e8578 Add send_venue method 2017-12-16 02:03:09 +01:00
Dan
ae36a57ee1 Add send_video_note method 2017-12-16 01:45:29 +01:00
Dan
ecd40f267e Add send_voice method 2017-12-16 01:27:13 +01:00
Dan
d528672a3b Add send_video method 2017-12-16 01:16:52 +01:00
Dan
9986b707ae Default to audio/mpeg mime type when sending audios 2017-12-16 01:05:25 +01:00
Dan
31b53e027b Add send_document method 2017-12-15 10:09:29 +01:00
Dan
4a8808fa3c Remove blank line 2017-12-14 11:04:15 +01:00
Dan
60dc1e577c Add send_audio method 2017-12-14 10:57:30 +01:00
Dan
a5d1b7f480 Add send_photo method 2017-12-14 09:44:51 +01:00
Dan
8570d8a322 Implement file uploading 2017-12-14 09:34:58 +01:00
Dan
ec8140a1d9 Add support for user mentions 2017-12-13 10:44:24 +01:00
Dan
7f1bde662a Store parsed peers instead of raw dicts 2017-12-13 09:53:50 +01:00
Dan
e7c44933c2 Move chat actions to a separate class 2017-12-12 14:51:02 +01:00
Dan
6fa8375cb5 Hint the correct type 2017-12-12 08:07:31 +01:00
Dan
6fd8e960ec Add stop method for Client 2017-12-09 20:52:02 +01:00
Dan
746a4b685f Correctly set the update handler when authorizing a new user 2017-12-09 20:34:31 +01:00
Dan
0a00d2a8ee Reformat terms display 2017-12-09 17:11:09 +01:00
Dan
fe9b968ad8 Add basic update handler 2017-12-08 23:40:29 +01:00
Dan
315563ede0 Add TODO for delete_messages 2017-12-07 02:36:01 +01:00
Dan
d0feb8fb15 Add delete_messages method 2017-12-07 02:31:05 +01:00
Dan
e3850ce75a Parse markdown on edit_message_text 2017-12-07 02:15:41 +01:00
Dan
28c3a07d84 Fallback to "typing" instead of throwing an error 2017-12-07 02:11:35 +01:00
Dan
88bc7b59a1 Fix wrong keyword argument 2017-12-07 02:02:51 +01:00
Dan
500c88ae84 Reformat code 2017-12-07 02:02:16 +01:00
Dan
5c11f42933 Rename ACTIONS -> CHAT_ACTIONS 2017-12-06 21:57:46 +01:00
Dan
f561ef59bf Reformat method 2017-12-06 21:51:23 +01:00
Dan
1fe651f0b0 Add edit_message_text method 2017-12-06 21:48:25 +01:00
Dan
79e972df85 Move ACTIONS outside the method 2017-12-06 21:33:57 +01:00
Dan
0a12d9c5bd Add send_chat_action method 2017-12-06 21:25:22 +01:00
Dan
f60e48ab0a Add send_contact method 2017-12-06 21:05:25 +01:00
Dan
a8ae43adca Add send_location method 2017-12-06 21:01:23 +01:00
Dan
70e4e4e008 Enable fetching all user's dialogs 2017-12-06 20:46:21 +01:00
Dan
ae84bb267f Add forward_messages method 2017-12-06 20:45:56 +01:00
Dan
740c96f0ea Optimize imports 2017-12-06 20:26:40 +01:00
Dan
08d6912637 Add disable_notification parameter 2017-12-06 20:26:01 +01:00
Dan
fc5fc6e85b Add client package 2017-12-05 12:42:09 +01:00