Beispiel #1
0
def cmd_save_text(message):
    if len(message.text) > 1000:
        bot.send_message(message.chat.id, config.lang.s_error_note_too_long)
        return None
    global offset_storage

    # Check, if message starts with bot mention. If yes -> remove it
    if message.text.startswith(r'@'):
        message.text = ' '.join(message.text.split()[1:])

    # Convert user's time to server's local time to set "at" command taking offset into account
    time_to_set = utils.convert_user_time_to_at_command(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(key=str(message.chat.id)))
    logger.debug('User {0!s} is going to set time: {1!s}'.format(
        str(message.from_user.username) + ' (' + str(message.chat.id) + ')', time_to_set))
    # Get Unixtime to set to SQLite DB
    unixtime_to_save_to_db = utils.convert_user_time_to_local_timestamp(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(str(message.chat.id)))
    # Set "at" command and recieve Job ID from it
    job_id = systemtools.set_new_at_job(message.chat.id, time_to_set, message.text.replace('"', r'\"'))
    # Probably this is not the best choice, because some errors can have "job" word in them
    # If not job id provided (error happened or something else)
    if not job_id:
        bot.send_message(message.chat.id, config.lang.s_error_could_not_save_note)
        return None
    logger.info('Successfully set reminder #{0!s} at {1!s}'.format(job_id, time_to_set))
    # Insert new row in table
    mydb = SQLighter(config.database_schedules_file)
    mydb.insert(message.chat.id, unixtime_to_save_to_db, job_id)
    mydb.close()
    bot.send_message(message.chat.id, config.lang.s_common_note_added.format(
        utils.get_time_storage().get(str(message.chat.id))))
    # After setting note, reset to START
    set_new_state(message.chat.id, StateMachine.States.STATE_START)
Beispiel #2
0
def add_page_to_type(message):
    UID = message.chat.id
    UTXT = message.text

    if UTXT == u'/cancel':
        bot.send_message(UID,
                         'Хорошо, возвращаю тебя на главную.',
                         reply_markup=key_default)
    elif UTXT == u'В диалог с ботом 👤':
        with open(str(UID) + '.UID', 'r') as file:
            # Открываем временный .UID для чтения
            data = json.load(file)

        data['to'] = 0
        data['channel'] = UID
        db = SQLighter()
        # Выполняем запрос в БД, если пользователь выбрал 'В чат с ботом'
        db.insert(data['uid'], data['vk'], data['vk_original'],
                  data['vk_type'], int(data['last_id']), 0, 0, 0, 1)
        db.close()

        msg = bot.send_message(UID, 'Я буду присылать новые записи с указанной страницы в этот диалог ' \
            '(с ботом *VK Poster*).\n\nЧтобы включить отправку репостов из других групп, а также настроить ' \
            'отправку вложений (фотографий, аудио и т. д.) перейди в *Настройки моих страниц*.' \
            '\n\nЧто будем делать дальше?', parse_mode='Markdown', reply_markup=key_default)
        botan.track(BOTAN_TOKEN, message.chat.id, message,
                    'Добавление страницы (в чат с ботом)')
    elif UTXT == u'В публичный канал 👥':
        msg = bot.send_message(UID, 'Чтобы бот смог отправлять записи в публичный канал, нужно сделать бота ' \
            '*VK Poster* администратором канала.\n\nКогда администратор добавлен, отправь мне логин ' \
            'канала (например: *@durov*):', parse_mode='Markdown', reply_markup=key_hide)
        bot.register_next_step_handler(msg, add_page_channel)
    else:
        msg = bot.reply_to(
            message,
            'Похоже, ты не ответил на вопрос. Куда присылать новые записи?')
        bot.register_next_step_handler(msg, add_page_to_type)
Beispiel #3
0
def add_page_channel(message):
    UID = message.chat.id
    UTXT = message.text
    accept = True

    if UTXT == u'/cancel':
        bot.send_message(UID,
                         'Хорошо, возвращаю тебя на главную.',
                         reply_markup=key_default)
    elif bool(re.search('^@\S+\Z', UTXT)):
        db = SQLighter()
        check = db.select_by_chn(UTXT)
        db.close()
        if len(check) > 0:
            if int(check[0][1]) != int(UID):
                # Проверяем, есть ли уже такой канал в базе, и если есть,
                # то сверяем ID текущего пользователя и ID пользователя из базы
                # во избежание получения доступа к чужому каналу Telegram, в
                # котором бот уже является администратором
                msg = bot.reply_to(message, 'Хмм, похоже, что кто-то другой уже использует данный канал.\n' \
                    'Чтобы добавить страницу VK для данного канала, используй аккаунт Telegram, с которого ' \
                    'добавлял первую страницу.\n\nПопробуй прислать другой логин канала (начинается с ' \
                    '*@*) или нажми /cancel для отмены.', reply_markup=key_hide, parse_mode='Markdown')
                accept = False
                bot.register_next_step_handler(msg, add_page_channel)
        if accept:
            try:
                if len(check) < 1:
                    bot.send_message(UTXT, 'Бот *VK Poster* (@VKPstBot) теперь будет отправлять ' \
                        'записи в этот канал.', parse_mode='Markdown')

                with open(str(UID) + '.UID', 'r') as file:
                    # Открываем временный .UID для чтения
                    data = json.load(file)

                data['to'] = 1
                data['channel'] = UTXT

                db = SQLighter()
                # Выполняем запрос в БД, если пользователь выбрал 'В публичный канал'
                db.insert(data['uid'], data['vk'],
                          data['vk_original'], data['vk_type'],
                          int(data['last_id']), int(data['to']),
                          data['channel'], 0, 1)
                db.close()

                UTXT = re.sub('_', '\_', UTXT)
                msg = bot.send_message(UID, 'Я буду присылать новые записи с указанной страницы в канал ' \
                    '%s.\n\nЧтобы включить отправку репостов из других групп, а также настроить ' \
                    'отправку вложений (фотографий, аудио и т. д.) перейди в *Настройки моих страниц*.' \
                    '\n\nЧто будем делать дальше?' % (UTXT.encode('utf-8')),
                    parse_mode='Markdown', reply_markup=key_default)
                botan.track(BOTAN_TOKEN, message.chat.id, message,
                            'Добавление страницы (в публичный канал)')
            except Exception as ex:
                UTXT = re.sub('_', '\_', UTXT)
                msg = bot.reply_to(message, 'Необходимо сделать бота *VK Poster* администратором канала %s.\n' \
                    'Отправь мне логин канала (начинается с *@*), в котором *VK Poster* является ' \
                    'администратором и может отправлять сообщения.' % (UTXT.encode('utf-8')),
                    parse_mode='Markdown')
                bot.register_next_step_handler(msg, add_page_channel)
    elif accept:
        msg = bot.reply_to(message, 'Похоже, ты не прислал логин канала (начинается с *@*). ' \
            'Попробуй ещё раз.', parse_mode='Markdown')
        bot.register_next_step_handler(msg, add_page_channel)