diff --git a/telebot/apihelper.py b/telebot/apihelper.py index 140479f..4cbf670 100644 --- a/telebot/apihelper.py +++ b/telebot/apihelper.py @@ -1277,7 +1277,7 @@ def send_poll( payload = { 'chat_id': str(chat_id), 'question': question, - 'options': json.dumps(options)} + 'options': json.dumps(_convert_poll_options(options))} if is_anonymous is not None: payload['is_anonymous'] = is_anonymous @@ -1347,6 +1347,20 @@ def _convert_entites(entites): return entites +def _convert_poll_options(poll_options): + if poll_options is None: + return None + elif len(poll_options) == 0: + return [] + elif isinstance(poll_options[0], str): + # Compatibility mode with previous bug when only list of string was accepted as poll_options + return poll_options + elif isinstance(poll_options[0], types.JsonSerializable): + return [option.text for option in poll_options] + else: + return poll_options + + def convert_input_media(media): if isinstance(media, types.InputMedia): return media.convert_input_media() diff --git a/telebot/types.py b/telebot/types.py index 9cad691..5e3b333 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -2527,7 +2527,8 @@ class InputMediaDocument(InputMedia): return ret -class PollOption(JsonSerializable, JsonDeserializable): +class PollOption(JsonDeserializable): +#class PollOption(JsonSerializable, JsonDeserializable): @classmethod def de_json(cls, json_string): if (json_string is None): return None @@ -2539,10 +2540,10 @@ class PollOption(JsonSerializable, JsonDeserializable): def __init__(self, text, voter_count = 0): self.text = text self.voter_count = voter_count - - def to_json(self): - # send_poll Option is a simple string: https://core.telegram.org/bots/api#sendpoll - return json.dumps(self.text) + # Converted in _convert_poll_options + # def to_json(self): + # # send_poll Option is a simple string: https://core.telegram.org/bots/api#sendpoll + # return json.dumps(self.text) class Poll(JsonDeserializable):