55from telebot import types
66from telebot import util
77
8- merge = util .merge_dicts
98logger = telebot .logger
109
1110API_URL = "https://api.telegram.org/bot{0}/{1}"
@@ -41,7 +40,35 @@ def __init__(self, token, request_executor, api_url=API_URL, file_url=FILE_URL):
4140 self .api_url = api_url
4241 self .file_url = file_url
4342
43+ @staticmethod
44+ def convert_markup (markup ):
45+ return markup .to_json () if isinstance (markup , types .JsonSerializable ) else markup
46+
47+ @staticmethod
48+ def convert_inline_results (results ):
49+ """
50+ Converts a list of InlineQueryResult objects to a json string.
51+ :param results: list of InlineQueryResult objects
52+ :rtype: str
53+ """
54+ converted_results = [r .to_json () for r in results ]
55+ return '[' + ',' .join (converted_results ) + ']'
56+
57+ @staticmethod
58+ def __merge (* dicts ):
59+ """
60+ Merges two or more dicts into one, and deletes any keys which' associated values are equal to None.
61+ :rtype: dict
62+ """
63+ d = util .merge_dicts (dicts )
64+ for k , v in d :
65+ if v is None :
66+ del d [k ]
67+ return d
68+
4469 def make_request (self , method_name , params = None , files = None , method = 'get' ):
70+ if 'reply_markup' in params :
71+ params ['reply_markup' ] = self .convert_markup (params ['reply_markup' ])
4572 request_url = self .api_url .format (self .token , method_name )
4673 response = self .request_executor .make_request (request_url , method , params , files )
4774 return response
@@ -59,7 +86,7 @@ def download_file(self, file_path):
5986
6087 def send_message (self , chat_id , text , ** kwargs ):
6188 payload = {'chat_id' : str (chat_id ), 'text' : text }
62- return self .make_request ('sendMessage' , merge (payload , kwargs ), method = 'post' )
89+ return self .make_request ('sendMessage' , self . __merge (payload , kwargs ), method = 'post' )
6390
6491 def set_webhook (self , url = "" , certificate = None ):
6592 files = None
@@ -71,11 +98,11 @@ def get_updates(self, **kwargs):
7198 return self .make_request ('getUpdates' , params = kwargs )
7299
73100 def get_user_profile_photos (self , user_id , ** kwargs ):
74- params = merge ({'user_id' : user_id }, kwargs )
101+ params = self . __merge ({'user_id' : user_id }, kwargs )
75102 return self .make_request ('getUserProfilePhotos' , params = params )
76103
77104 def forward_message (self , chat_id , from_chat_id , message_id , ** kwargs ):
78- params = merge ({
105+ params = self . __merge ({
79106 'chat_id' : chat_id ,
80107 'from_chat_id' : from_chat_id ,
81108 'message_id' : message_id
@@ -89,11 +116,11 @@ def send_photo(self, chat_id, photo, **kwargs):
89116 files = {'photo' : photo }
90117 else :
91118 params ['photo' ] = photo
92- params = merge (params , kwargs )
119+ params = self . __merge (params , kwargs )
93120 return self .make_request ('sendPhoto' , params = params , files = files )
94121
95122 def send_location (self , chat_id , latitude , longitude , ** kwargs ):
96- params = merge ({'chat_id' : chat_id , 'latitude' : latitude , 'longitude' : longitude }, kwargs )
123+ params = self . __merge ({'chat_id' : chat_id , 'latitude' : latitude , 'longitude' : longitude }, kwargs )
97124 return self .make_request ('sendLocation' , params = params )
98125
99126 def send_venue (self , chat_id , latitude , longitude , title , address , ** kwargs ):
@@ -102,7 +129,7 @@ def send_venue(self, chat_id, latitude, longitude, title, address, **kwargs):
102129 return self .make_request ('sendVenue' , params = params )
103130
104131 def send_contact (self , chat_id , phone_number , first_name , ** kwargs ):
105- params = merge ({'chat_id' : chat_id , 'phone_number' : phone_number , 'first_name' : first_name }, kwargs )
132+ params = self . __merge ({'chat_id' : chat_id , 'phone_number' : phone_number , 'first_name' : first_name }, kwargs )
106133 return self .make_request ('sendContact' , params = params )
107134
108135 def send_chat_action (self , chat_id , action ):
@@ -130,7 +157,7 @@ def send_data(self, data_type, chat_id, data, **kwargs):
130157 files = {data_type : data }
131158 else :
132159 params [data_type ] = data
133- params = merge (params , kwargs )
160+ params = self . __merge (params , kwargs )
134161 return self .make_request (self .get_method_by_type (data_type ), params = params , files = files , method = 'post' )
135162
136163 @staticmethod
@@ -150,22 +177,25 @@ def unban_chat_member(self, chat_id, user_id):
150177 return self .make_request ('unbanChatMember' , params = {'chat_id' : chat_id , 'user_id' : user_id }, method = 'post' )
151178
152179 def edit_message_text (self , text , ** kwargs ):
153- params = merge ({'text' : text }, kwargs )
180+ params = self . __merge ({'text' : text }, kwargs )
154181 return self .make_request ('editMessageText' , params = params )
155182
156183 def edit_message_caption (self , caption , ** kwargs ):
157- params = merge ({'caption' : caption }, kwargs )
184+ params = self . __merge ({'caption' : caption }, kwargs )
158185 return self .make_request ('editMessageCaption' , params = params )
159186
160187 def edit_message_reply_markup (self , ** kwargs ):
161188 return self .make_request ('editMessageReplyMarkup' , params = kwargs )
162189
163190 def answer_callback_query (self , callback_query_id , ** kwargs ):
164- params = merge ({'callback_query_id' : callback_query_id }, kwargs )
191+ params = self . __merge ({'callback_query_id' : callback_query_id }, kwargs )
165192 return self .make_request ('answerCallbackQuery' , params = params )
166193
167- def answer_inline_query (self , inline_query_id , results ):
168- params = merge ({'inline_query_id' : inline_query_id , 'results' : results })
194+ def answer_inline_query (self , inline_query_id , results , ** kwargs ):
195+ params = self .__merge ({
196+ 'inline_query_id' : inline_query_id ,
197+ 'results' : self .convert_inline_results (results )
198+ }, kwargs )
169199 return self .make_request ('answerInlineQuery' , params = params , method = 'post' )
170200
171201def _make_request (token , method_name , method = 'get' , params = None , files = None , base_url = API_URL ):
0 commit comments