def init_poll(msg: catbot.Message): user_input_token = msg.html_formatted_text.split() if len(user_input_token) == 1: bot.send_message(msg.chat.id, text=config['messages']['init_poll_failed'], reply_to_message_id=msg.id) return poll_chat_id = int(str(msg.chat.id).replace('-100', '')) p = Poll(poll_chat_id, msg.id) i = 1 parser = parsedatetime.Calendar() while i < len(user_input_token): if user_input_token[i] == '-n': i += 1 title_list = [] while i < len(user_input_token ) and not user_input_token[i].startswith('-'): title_list.append(user_input_token[i]) i += 1 p.title = ' '.join(title_list) elif user_input_token[i] == '-t': i += 1 t_list = [] while i < len(user_input_token ) and not user_input_token[i].startswith('-'): t_list.append(user_input_token[i]) i += 1 t_str = ' '.join(t_list) p.last_time = time.mktime( parser.parse(datetimeString=t_str)[0]) - time.time() p.readable_time = t_str elif user_input_token[i] == '-o': i += 1 option_text = '' while i < len(user_input_token ) and not user_input_token[i].startswith('-'): option_text += user_input_token[i] + ' ' i += 1 options = option_text.split('!') for j in range(options.count('')): options.remove('') p.set_option(options) elif user_input_token[i] == '-ao': p.anonymous_open = True i += 1 elif user_input_token[i] == '-ac': p.anonymous_closed = True i += 1 elif user_input_token[i] == '-c': p.count_open = True i += 1 elif user_input_token[i] == '-m': p.multiple = True i += 1 elif user_input_token[i] == '-p': i += 1 while i < len(user_input_token ) and not user_input_token[i].startswith('-'): try: p.privilege_level = int(user_input_token[i]) except ValueError: bot.send_message( msg.chat.id, text=config['messages']['init_poll_failed'], reply_to_message_id=msg.id) return else: i += 1 break else: # format error bot.send_message(msg.chat.id, text=config['messages']['init_poll_failed'], reply_to_message_id=msg.id) return if len(p.option_list) == 0: bot.send_message(msg.chat.id, text=config['messages']['init_poll_failed'], reply_to_message_id=msg.id) return with t_lock: poll_list, rec = record_empty_test('poll', list) poll_list.append(p.to_json()) rec['poll'] = poll_list json.dump(rec, open(config['record'], 'w', encoding='utf-8'), indent=2, ensure_ascii=False) resp_text = config['messages']['init_poll_succ'].format( title=p.title, last=p.readable_time, anon_open=p.anonymous_open, anon_closed=p.anonymous_closed, count_open=p.count_open, multiple=p.multiple, privilege=config['messages']['vote_privilege'][str(p.privilege_level)]) start_button = catbot.InlineKeyboardButton( config['messages']['start_poll_button'], callback_data=f'vote_{p.chat_id}_{p.init_id}_start') abort_button = catbot.InlineKeyboardButton( config['messages']['abort_poll_button'], callback_data=f'vote_{p.chat_id}_{p.init_id}_abort') keyboard = catbot.InlineKeyboard([[start_button, abort_button]]) bot.send_message(msg.chat.id, text=resp_text, reply_to_message_id=msg.id, reply_markup=keyboard, parse_mode='HTML')