From 0b0bc3d550c59a255ac58e225b360a5c3284ba43 Mon Sep 17 00:00:00 2001 From: Leandro Toledo Date: Tue, 7 Jul 2015 20:10:43 -0300 Subject: [PATCH] Adding sendAudio method --- telegram/bot.py | 52 ++++++++++++++++++++++++++++++++++++++++++++- tests/telegram.ogg | Bin 0 -> 9199 bytes tests/test_bot.py | 16 +++++++++++++- 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 tests/telegram.ogg diff --git a/telegram/bot.py b/telegram/bot.py index 82b6a7e79..46b8c7241 100644 --- a/telegram/bot.py +++ b/telegram/bot.py @@ -153,9 +153,48 @@ class Bot(object): return Message.newFromJsonDict(data) - def sendAudio(self): + def sendAudio(self, + chat_id, + audio, + reply_to_message_id=None, + reply_markup=None): + """Use this method to send audio files, if you want Telegram clients to + display the file as a playable voice message. For this to work, your + audio must be in an .ogg file encoded with OPUS (other formats may be + sent as telegram.Document). + + Args: + chat_id: + Unique identifier for the message recipient — User or GroupChat id. + audio: + Audio file to send. You can either pass a file_id as String to + resend an audio that is already on the Telegram servers, or upload + a new audio file using multipart/form-data. + reply_to_message_id: + If the message is a reply, ID of the original message. [Optional] + reply_markup: + Additional interface options. A JSON-serialized object for a + custom reply keyboard, instructions to hide keyboard or to force a + reply from the user. [Optional] + Returns: + A telegram.Message instance representing the message posted. + """ + url = '%s/sendAudio' % (self.base_url) + data = {'chat_id': chat_id, + 'audio': audio} + + if reply_to_message_id: + data['reply_to_message_id'] = reply_to_message_id + if reply_markup: + data['reply_markup'] = reply_markup + + json_data = self._requestUrl(url, 'POST', data=data) + data = self._parseAndCheckTelegram(json_data.content) + + return Message.newFromJsonDict(data) + def sendDocument(self): url = '%s/sendDocument' % (self.base_url) @@ -226,6 +265,17 @@ class Bot(object): ) except requests.RequestException as e: pass + if 'audio' in data and isinstance(data['audio'], file): + try: + audio = data.pop('audio') + + return requests.post( + url, + data=data, + files={'audio': audio} + ) + except requests.RequestException as e: + pass else: try: return requests.post( diff --git a/tests/telegram.ogg b/tests/telegram.ogg new file mode 100644 index 0000000000000000000000000000000000000000..13f2944722fe46e2f67c5d45eaad5e91992f4fff GIT binary patch literal 9199 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