Skip to content

Commit 0ba78cc

Browse files
committed
Added convert_reply_markup and convert_inline_results to ApiInterface
1 parent 7fd7ea7 commit 0ba78cc

File tree

1 file changed

+43
-13
lines changed

1 file changed

+43
-13
lines changed

telebot/apihelper.py

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from telebot import types
66
from telebot import util
77

8-
merge = util.merge_dicts
98
logger = telebot.logger
109

1110
API_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

171201
def _make_request(token, method_name, method='get', params=None, files=None, base_url=API_URL):

0 commit comments

Comments
 (0)