44"""A library that provides a Python interface to the Telegram Bot API"""
55
66import json
7- import urllib
8- import urllib2
7+ try :
8+ from urllib .parse import urlencode
9+ from urllib .request import urlopen , Request
10+ from urllib .error import HTTPError , URLError
11+ except ImportError :
12+ from urllib import urlencode
13+ from urllib2 import urlopen , Request
14+ from urllib2 import HTTPError , URLError
915import functools
1016
1117from telegram import (User , Message , Update , UserProfilePhotos , TelegramError ,
@@ -28,30 +34,22 @@ def __init__(self,
2834 try :
2935 bot = self .getMe ()
3036
31- self ._id = bot .id
32- self ._first_name = bot .first_name
33- self ._last_name = bot .last_name
34- self ._username = bot .username
37+ self .id = bot .id
38+ self .first_name = bot .first_name
39+ self .last_name = bot .last_name
40+ self .username = bot .username
3541
3642 self .__auth = True
3743 except TelegramError :
3844 raise TelegramError ({'message' : 'Bad token' })
3945
4046 @property
41- def id (self ):
42- return self ._id
43-
44- @property
45- def first_name (self ):
46- return self ._first_name
47-
48- @property
49- def last_name (self ):
50- return self ._last_name
51-
52- @property
53- def username (self ):
54- return self ._username
47+ def name (self ):
48+ if self .username :
49+ return '@%s' % self .username
50+ if self .last_name :
51+ return '%s %s' % (self .first_name , self .last_name )
52+ return self .first_name
5553
5654 def clearCredentials (self ):
5755 """Clear any credentials for this instance.
@@ -65,7 +63,7 @@ def getMe(self):
6563 A telegram.User instance representing that bot if the
6664 credentials are valid, None otherwise.
6765 """
68- url = '%s/getMe' % ( self .base_url )
66+ url = '%s/getMe' % self .base_url
6967
7068 json_data = self ._requestUrl (url , 'GET' )
7169 data = self ._parseAndCheckTelegram (json_data )
@@ -141,15 +139,15 @@ def sendMessage(self,
141139 A telegram.Message instance representing the message posted.
142140 """
143141
144- url = '%s/sendMessage' % ( self .base_url )
142+ url = '%s/sendMessage' % self .base_url
145143
146144 data = {'chat_id' : chat_id ,
147145 'text' : text }
148146
149147 if disable_web_page_preview :
150148 data ['disable_web_page_preview' ] = disable_web_page_preview
151149
152- return ( url , data )
150+ return url , data
153151
154152 @message
155153 @require_authentication
@@ -172,7 +170,7 @@ def forwardMessage(self,
172170 A telegram.Message instance representing the message forwarded.
173171 """
174172
175- url = '%s/forwardMessage' % ( self .base_url )
173+ url = '%s/forwardMessage' % self .base_url
176174
177175 data = {}
178176 if chat_id :
@@ -182,7 +180,7 @@ def forwardMessage(self,
182180 if message_id :
183181 data ['message_id' ] = message_id
184182
185- return ( url , data )
183+ return url , data
186184
187185 @message
188186 @require_authentication
@@ -215,15 +213,15 @@ def sendPhoto(self,
215213 A telegram.Message instance representing the message posted.
216214 """
217215
218- url = '%s/sendPhoto' % ( self .base_url )
216+ url = '%s/sendPhoto' % self .base_url
219217
220218 data = {'chat_id' : chat_id ,
221219 'photo' : photo }
222220
223221 if caption :
224222 data ['caption' ] = caption
225223
226- return ( url , data )
224+ return url , data
227225
228226 @message
229227 @require_authentication
@@ -255,12 +253,12 @@ def sendAudio(self,
255253 A telegram.Message instance representing the message posted.
256254 """
257255
258- url = '%s/sendAudio' % ( self .base_url )
256+ url = '%s/sendAudio' % self .base_url
259257
260258 data = {'chat_id' : chat_id ,
261259 'audio' : audio }
262260
263- return ( url , data )
261+ return url , data
264262
265263 @message
266264 @require_authentication
@@ -289,12 +287,12 @@ def sendDocument(self,
289287 A telegram.Message instance representing the message posted.
290288 """
291289
292- url = '%s/sendDocument' % ( self .base_url )
290+ url = '%s/sendDocument' % self .base_url
293291
294292 data = {'chat_id' : chat_id ,
295293 'document' : document }
296294
297- return ( url , data )
295+ return url , data
298296
299297 @message
300298 @require_authentication
@@ -323,12 +321,12 @@ def sendSticker(self,
323321 A telegram.Message instance representing the message posted.
324322 """
325323
326- url = '%s/sendSticker' % ( self .base_url )
324+ url = '%s/sendSticker' % self .base_url
327325
328326 data = {'chat_id' : chat_id ,
329327 'sticker' : sticker }
330328
331- return ( url , data )
329+ return url , data
332330
333331 @message
334332 @require_authentication
@@ -358,12 +356,12 @@ def sendVideo(self,
358356 A telegram.Message instance representing the message posted.
359357 """
360358
361- url = '%s/sendVideo' % ( self .base_url )
359+ url = '%s/sendVideo' % self .base_url
362360
363361 data = {'chat_id' : chat_id ,
364362 'video' : video }
365363
366- return ( url , data )
364+ return url , data
367365
368366 @message
369367 @require_authentication
@@ -393,13 +391,13 @@ def sendLocation(self,
393391 A telegram.Message instance representing the message posted.
394392 """
395393
396- url = '%s/sendLocation' % ( self .base_url )
394+ url = '%s/sendLocation' % self .base_url
397395
398396 data = {'chat_id' : chat_id ,
399397 'latitude' : latitude ,
400398 'longitude' : longitude }
401399
402- return ( url , data )
400+ return url , data
403401
404402 @message
405403 @require_authentication
@@ -425,12 +423,12 @@ def sendChatAction(self,
425423 - ChatAction.FIND_LOCATION for location data.
426424 """
427425
428- url = '%s/sendChatAction' % ( self .base_url )
426+ url = '%s/sendChatAction' % self .base_url
429427
430428 data = {'chat_id' : chat_id ,
431429 'action' : action }
432430
433- return ( url , data )
431+ return url , data
434432
435433 @require_authentication
436434 def getUserProfilePhotos (self ,
@@ -453,7 +451,7 @@ def getUserProfilePhotos(self,
453451 Returns a telegram.UserProfilePhotos object.
454452 """
455453
456- url = '%s/getUserProfilePhotos' % ( self .base_url )
454+ url = '%s/getUserProfilePhotos' % self .base_url
457455
458456 data = {'user_id' : user_id }
459457
@@ -492,7 +490,7 @@ def getUpdates(self,
492490 A list of telegram.Update objects are returned.
493491 """
494492
495- url = '%s/getUpdates' % ( self .base_url )
493+ url = '%s/getUpdates' % self .base_url
496494
497495 data = {}
498496 if offset :
@@ -524,7 +522,7 @@ def setWebhook(self,
524522 Returns:
525523 True if successful else TelegramError was raised
526524 """
527- url = '%s/setWebhook' % ( self .base_url )
525+ url = '%s/setWebhook' % self .base_url
528526
529527 data = {'url' : webhook_url }
530528
@@ -556,29 +554,29 @@ def _requestUrl(self,
556554 if InputFile .is_inputfile (data ):
557555 data = InputFile (data )
558556
559- request = urllib2 . Request (
557+ request = Request (
560558 url ,
561559 data = data .to_form (),
562560 headers = data .headers
563561 )
564562
565- return urllib2 . urlopen (request ).read ()
563+ return urlopen (request ).read ()
566564 else :
567- return urllib2 . urlopen (
565+ return urlopen (
568566 url ,
569- urllib . urlencode (data )
567+ urlencode (data ). encode ( )
570568 ).read ()
571569 except IOError as e :
572570 raise TelegramError (str (e ))
573- except urllib2 . HTTPError as e :
571+ except HTTPError as e :
574572 raise TelegramError (str (e ))
575- except urllib2 . URLError as e :
573+ except URLError as e :
576574 raise TelegramError (str (e ))
577575
578576 if method == 'GET' :
579577 try :
580- return urllib2 . urlopen (url ).read ()
581- except urllib2 . URLError as e :
578+ return urlopen (url ).read ()
579+ except URLError as e :
582580 raise TelegramError (str (e ))
583581
584582 return 0 # if not a POST or GET request
0 commit comments