示例#1
0
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')