From c3300af65696c7505da161d59e5181418624c905 Mon Sep 17 00:00:00 2001 From: eternnoir Date: Wed, 19 Aug 2015 18:08:01 +0800 Subject: [PATCH 1/4] New audio,voice supported. --- telebot/__init__.py | 8 ++++++-- telebot/apihelper.py | 41 +++++++++++++++++++++++++++++++++++-- telebot/types.py | 33 +++++++++++++++++++++++++++++ tests/test_data/record.mp3 | Bin 0 -> 20096 bytes tests/test_data/record.ogg | Bin 0 -> 10481 bytes tests/test_data/record.wav | Bin 0 -> 60044 bytes tests/test_telebot.py | 20 ++++++++++++++++++ tests/test_types.py | 14 +++++++++++-- 8 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 tests/test_data/record.mp3 create mode 100644 tests/test_data/record.ogg create mode 100644 tests/test_data/record.wav diff --git a/telebot/__init__.py b/telebot/__init__.py index d140ccf..fedeec3 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -231,7 +231,7 @@ class TeleBot: return types.Message.de_json( apihelper.send_photo(self.token, chat_id, photo, caption, reply_to_message_id, reply_markup)) - def send_audio(self, chat_id, data, reply_to_message_id=None, reply_markup=None): + def send_audio(self, chat_id, audio, duration=None, performer=None, title=None, 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 @@ -242,7 +242,11 @@ class TeleBot: :return: API reply. """ return types.Message.de_json( - apihelper.send_data(self.token, chat_id, data, 'audio', reply_to_message_id, reply_markup)) + apihelper.send_audio(self.token, chat_id, audio,duration,performer,title, reply_to_message_id, reply_markup)) + + def send_voice(self, chat_id, voice, duration=None, reply_to_message_id=None, reply_markup=None): + return types.Message.de_json( + apihelper.send_voice(self.token, chat_id, voice, duration, reply_to_message_id,reply_markup)) def send_document(self, chat_id, data, reply_to_message_id=None, reply_markup=None): """ diff --git a/telebot/apihelper.py b/telebot/apihelper.py index afdc63b..fafd5d9 100644 --- a/telebot/apihelper.py +++ b/telebot/apihelper.py @@ -139,6 +139,45 @@ def send_video(token, chat_id, data, duration=None, caption=None, reply_to_messa return _make_request(token, method_url, params=payload, files=files, method='post') +def send_voice(token, chat_id, voice, duration=None, reply_to_message_id=None, reply_markup=None): + method_url = r'sendVoice' + payload = {'chat_id': chat_id} + files = None + if not is_string(voice): + files = {'voice': voice} + else: + payload['voice'] = voice + if duration: + payload['duration'] = duration + if reply_to_message_id: + payload['reply_to_message_id'] = reply_to_message_id + if reply_markup: + payload['reply_markup'] = _convert_markup(reply_markup) + return _make_request(token, method_url, params=payload, files=files, method='post') + + +def send_audio(token, chat_id, audio, duration=None, performer=None, title=None, reply_to_message_id=None, + reply_markup=None): + method_url = r'sendAudio' + payload = {'chat_id': chat_id} + files = None + if not is_string(audio): + files = {'audio': audio} + else: + payload['audio'] = audio + if duration: + payload['duration'] = duration + if performer: + payload['performer'] = performer + if title: + payload['title'] = title + if reply_to_message_id: + payload['reply_to_message_id'] = reply_to_message_id + if reply_markup: + payload['reply_markup'] = _convert_markup(reply_markup) + return _make_request(token, method_url, params=payload, files=files, method='post') + + def send_data(token, chat_id, data, data_type, reply_to_message_id=None, reply_markup=None): method_url = get_method_by_type(data_type) payload = {'chat_id': chat_id} @@ -155,8 +194,6 @@ def send_data(token, chat_id, data, data_type, reply_to_message_id=None, reply_m def get_method_by_type(data_type): - if data_type == 'audio': - return 'sendAudio' if data_type == 'document': return 'sendDocument' if data_type == 'sticker': diff --git a/telebot/types.py b/telebot/types.py index 8c98774..f906edd 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -44,6 +44,7 @@ class JsonDeserializable: Subclasses of this class are guaranteed to be able to be created from a json-style dict or json formatted string. All subclasses of this class must override de_json. """ + @classmethod def de_json(cls, json_type): """ @@ -126,6 +127,9 @@ class Message(JsonDeserializable): if 'audio' in obj: opts['audio'] = Audio.de_json(obj['audio']) content_type = 'audio' + if 'voice' in obj: + opts['voice'] = Audio.de_json(obj['voice']) + content_type = 'voice' if 'document' in obj: opts['document'] = Document.de_json(obj['document']) content_type = 'document' @@ -210,6 +214,35 @@ class PhotoSize(JsonDeserializable): class Audio(JsonDeserializable): + @classmethod + def de_json(cls, json_string): + obj = cls.check_json(json_string) + file_id = obj['file_id'] + duration = obj['duration'] + performer = None + title = None + mime_type = None + file_size = None + if 'mime_type' in obj: + mime_type = obj['mime_type'] + if 'file_size' in obj: + file_size = obj['file_size'] + if 'performer' in obj: + performer = obj['performer'] + if 'title' in obj: + title = obj['title'] + return Audio(file_id, duration, performer, title, mime_type, file_size) + + def __init__(self, file_id, duration, performer=None, title=None, mime_type=None, file_size=None): + self.file_id = file_id + self.duration = duration + self.performer = performer + self.title = title + self.mime_type = mime_type + self.file_size = file_size + + +class Voice(JsonDeserializable): @classmethod def de_json(cls, json_string): obj = cls.check_json(json_string) diff --git a/tests/test_data/record.mp3 b/tests/test_data/record.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..759f0d224e0ddd57b7758fcc79e957ea408c1802 GIT binary patch literal 20096 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 E0Q3dWYybcN literal 0 HcmV?d00001 diff --git a/tests/test_data/record.ogg b/tests/test_data/record.ogg new file mode 100644 index 0000000000000000000000000000000000000000..09177b85a544045534bf0afeeff1500b4128fbea GIT binary patch literal 10481 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 a?gL`znW1KFIQ3yqQoWsB;x9f%;C}&5OP}@t literal 0 HcmV?d00001 diff --git a/tests/test_data/record.wav b/tests/test_data/record.wav new file mode 100644 index 0000000000000000000000000000000000000000..7bfd33558182c31a11a6ae63c23b7b34cc9aa4a7 GIT binary patch literal 60044 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 Date: Wed, 19 Aug 2015 18:13:40 +0800 Subject: [PATCH 2/4] Fix test case error. --- tests/test_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_types.py b/tests/test_types.py index 9686b75..cb4d1ca 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -110,5 +110,5 @@ def test_json_contact(): def test_json_voice(): json_string = r'{"duration": 0,"mime_type": "audio/ogg","file_id": "AwcccccccDH1JaB7w_gyFjYQxVAg","file_size": 10481}' voice = types.Voice.de_json(json_string) - assert voice.duration == 0; + assert voice.duration == 0 assert voice.file_size == 10481 From 1517979bf243cb0b0f5a2fb69364cf69dc9afd85 Mon Sep 17 00:00:00 2001 From: eternnoir Date: Wed, 19 Aug 2015 18:25:08 +0800 Subject: [PATCH 3/4] Voice bug fix. --- telebot/types.py | 2 +- tests/test_telebot.py | 2 -- tests/test_types.py | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/telebot/types.py b/telebot/types.py index f906edd..a1a532d 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -254,7 +254,7 @@ class Voice(JsonDeserializable): mime_type = obj['mime_type'] if 'file_size' in obj: file_size = obj['file_size'] - return Audio(file_id, duration, mime_type, file_size) + return Voice(file_id, duration, mime_type, file_size) def __init__(self, file_id, duration, mime_type=None, file_size=None): self.file_id = file_id diff --git a/tests/test_telebot.py b/tests/test_telebot.py index 5ec4b12..a53a3f0 100644 --- a/tests/test_telebot.py +++ b/tests/test_telebot.py @@ -197,6 +197,4 @@ def test_not_string(): i1 = 10 assert not apihelper.is_string(i1) - test_send_voice() -test_send_audio() diff --git a/tests/test_types.py b/tests/test_types.py index cb4d1ca..dadc611 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -112,3 +112,5 @@ def test_json_voice(): voice = types.Voice.de_json(json_string) assert voice.duration == 0 assert voice.file_size == 10481 + +test_json_voice() From b17831b726c67cec2e358b7101eafccfb0ca9865 Mon Sep 17 00:00:00 2001 From: eternnoir Date: Wed, 19 Aug 2015 18:27:35 +0800 Subject: [PATCH 4/4] Update Comment. --- telebot/__init__.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index fedeec3..0528340 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -233,18 +233,29 @@ class TeleBot: def send_audio(self, chat_id, audio, duration=None, performer=None, title=None, 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 - :param chat_id: - :param data: - :param reply_to_message_id: + Use this method to send audio files, if you want Telegram clients to display them in the music player. Your audio must be in the .mp3 format. + :param chat_id:Unique identifier for the message recipient + :param audio:Audio file to send. + :param duration:Duration of the audio in seconds + :param performer:Performer + :param title:Track name + :param reply_to_message_id:If the message is a reply, ID of the original messag :param reply_markup: - :return: API reply. + :return: Message """ return types.Message.de_json( apihelper.send_audio(self.token, chat_id, audio,duration,performer,title, reply_to_message_id, reply_markup)) def send_voice(self, chat_id, voice, duration=None, 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. + :param chat_id:Unique identifier for the message recipient. + :param voice: + :param duration:Duration of sent audio in seconds + :param reply_to_message_id: + :param reply_markup: + :return: Message + """ return types.Message.de_json( apihelper.send_voice(self.token, chat_id, voice, duration, reply_to_message_id,reply_markup))