Exemplo n.º 1
0
def save_to_folder(update, context):
    query = update.callback_query
    if query.message.chat_id < 0 and \
            (not query.message.reply_to_message or
             query.from_user.id != query.message.reply_to_message.from_user.id):
        alert_users(context, update.effective_user, 'invalid caller',
                    query.data)
        query.answer(text='Yo-he!', show_alert=True)
        return
    match = re.search(r'^save_to_folder(?:_page#[\d]+)?,\s*([\dA-Za-z\-_]+)$',
                      query.data)
    fav_folders = context.user_data.get(udkey_folders, {})
    if not match or match.group(1) not in fav_folders:
        alert_users(context, update.effective_user, 'invalid query',
                    query.data)
        query.answer(text='Yo-he!', show_alert=True)
        return
    message = query.message
    if message.caption:
        text = message.caption
    else:
        text = message.text
    folder_ids = parse_entity_for_drive_id(message)

    if not folder_ids:
        return
    dest_folder = fav_folders[match.group(1)]
    dest_folder['folder_id'] = match.group(1)
    if not thread_pool.get(update.effective_user.id, None):
        thread_pool[update.effective_user.id] = []
    t = MySaveFileThread(args=(update, context, folder_ids, text, dest_folder))
    thread_pool[update.effective_user.id].append(t)
    t.start()
    logger.debug('User {} has added task {}.'.format(query.from_user.id,
                                                     t.ident))
    query.message.edit_reply_markup(reply_markup=InlineKeyboardMarkup(
        [[InlineKeyboardButton(text='Executed', callback_data='#')]]))
Exemplo n.º 2
0
def chosen_folder(update, context):
    query = update.callback_query
    if query.message.chat_id < 0 and \
            (not query.message.reply_to_message or
             query.from_user.id != query.message.reply_to_message.from_user.id):
        alert_users(context, update.effective_user, 'invalid caller', query.data)
        query.answer(text='Yo-he!', show_alert=True)
        return
    if update.effective_user.id in config.USER_IDS\
            or (context.bot_data.get('vip', None) and update.effective_user.id in context.bot_data['vip']):
        max_folders = default_max_folders_vip
    else:
        max_folders = default_max_folders

    callback_query_prefix = 'chosen_folder'

    try:
        gd = GoogleDrive(update.effective_user.id)
    except Exception as e:
        context.bot.send_message(chat_id=update.effective_user.id,
                                 text='Please make sure the SA archive has been uploaded and the collection folder has been configured.\n'
                                      '<code>{}</code>'.format(html.escape(str(e))),
                                 parse_mode=ParseMode.HTML)
        return

    query = update.callback_query
    match = re.search(r'^{},(?P<folder_id>[\dA-Za-z\-_]+)$'.format(callback_query_prefix), query.data)
    if not match:
        alert_users(context, update.effective_user, 'invalid query', query.data)
        query.answer(text='Yo-he!', show_alert=True)
        return
    folder_id = match.group('folder_id')

    drive_ids_replace = context.user_data.get(udkey_fav_folders_replace, None)
    favourite_drive_ids = context.user_data.get(udkey_folders, {})
    new_fav_folders = copy.deepcopy(favourite_drive_ids)
    new_fav_folders.pop(drive_ids_replace, None)
    new_fav_folders_len = len(new_fav_folders)
    if new_fav_folders_len < max_folders:
        current_path_list = gd.get_file_path_from_id(folder_id)
        if not current_path_list:
            alert_users(context, update.effective_user, 'invalid folder id', query.data)
            query.answer(text='Yo-he!', show_alert=True)
            return
        current_path_list.reverse()
        new_fav_folders[folder_id] = {
            'name': current_path_list[-1]['name'],
            'path': '/' + '/'.join(item['name'] for item in current_path_list),
        }
        context.user_data[udkey_folders] = new_fav_folders
        context.user_data[udkey_fav_folders_replace] = None
        context.dispatcher.update_persistence()
        set_folders(update, context)
    else:
        query.answer(text='Maximum {}'.format(max_folders), show_alert=True)
    return
def choose_folder(update, context):
    current_folder_id = ''
    folders = None

    try:
        gd = GoogleDrive(update.effective_user.id)
    except Exception as e:
        context.bot.send_message(
            chat_id=update.effective_user.id,
            text=
            'Please confirm that the SA has been uploaded correctly and configure the favorite folder.\n'
            '<code>{}</code>'.format(html.escape(str(e))),
            parse_mode=ParseMode.HTML)
        return

    if context.args:
        current_folder_id = context.args[0]
        try:
            gd.get_file_name(current_folder_id)
            folders = gd.list_folders(current_folder_id)
        except Exception as e:
            folders = gd.get_drives()
            current_folder_id = ''
            context.bot.send_message(chat_id=update.effective_user.id,
                                     text='error:\n<code>{}</code>'.format(
                                         html.escape(str(e))),
                                     parse_mode=ParseMode.HTML)

    callback_query_prefix = 'choose_folder'
    query = update.callback_query
    page = None
    message_id = -1
    if not query:
        rsp = update.message.reply_text('Get catalog...')
        rsp.done.wait(timeout=60)
        message_id = rsp.result().message_id
        if not folders:
            folders = gd.get_drives()
            context.user_data[udkey_folders_cache] = copy.deepcopy(folders)

    if query:
        logger.debug('{}: {}'.format(update.effective_user.id, query.data))
        if query.message.chat_id < 0 and \
                (not query.message.reply_to_message or
                 query.from_user.id != query.message.reply_to_message.from_user.id):
            alert_users(context, update.effective_user, 'invalid caller',
                        query.data)
            query.answer(text='Yo ha', show_alert=True)
            return
        message_id = query.message.message_id
        match = re.search(
            r'^(?P<un>un)?{}(?P<replace>_replace)?(?:_page#(?P<page>\d+))?'
            r'(?:,(?P<folder_id>[\dA-Za-z\-_]+))?$'.format(
                callback_query_prefix), query.data)
        if match:
            match_folder_id = match.group('folder_id')
            if match_folder_id:
                current_folder_id = match_folder_id
                try:
                    gd.get_file_name(current_folder_id)
                    folders = gd.list_folders(match_folder_id)
                except Exception as e:
                    folders = gd.get_drives()
                    current_folder_id = ''
                    context.bot.send_message(
                        chat_id=update.effective_user.id,
                        text='error:\n<code>{}</code>'.format(
                            html.escape(str(e))),
                        parse_mode=ParseMode.HTML)
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
                if not folders:
                    folders = {'#': '(No subfolders)'}
                match_folder_id_replace = match.group('replace')
                if match_folder_id_replace:
                    context.user_data[
                        udkey_fav_folders_replace] = match_folder_id
            if match.group('page'):
                page = int(match.group('page'))
            if not folders and match.group('page'):
                folders = context.user_data.get(udkey_folders_cache, None)
            if not folders:
                folders = gd.get_drives()
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
            if not folders:
                folders = {
                    '#':
                    'If the team disk is not saved, please save it before operation.'
                }
        else:
            alert_users(context, update.effective_user, 'invalid query data',
                        query.data)
            query.answer(text='Yo ha', show_alert=True)
            return

    if not page:
        page = 1

    folders_len = len(folders)
    page_data = []
    for item in folders:
        page_data.append({'text': folders[item], 'data': item})

    page_data_chosen = list(context.user_data.get(udkey_folders, {}))
    inline_keyboard_drive_ids = get_inline_keyboard_pagination_data(
        callback_query_prefix,
        page_data,
        page_data_chosen=page_data_chosen,
        page=page,
        max_per_page=10,
    )

    if current_folder_id:
        current_path = ''
        current_path_list = gd.get_file_path_from_id(current_folder_id)
        if current_path_list:
            current_folder_name = current_path_list[0]['name']
            for item in current_path_list:
                current_path = '/{}{}'.format(item['name'], current_path)
            if len(current_path_list) > 1:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton(
                        '📁' + current_path,
                        callback_data='{},{}'.format(
                            callback_query_prefix,
                            current_path_list[1]['folder_id']))
                ])
            else:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton('📁' + current_path,
                                         callback_data=callback_query_prefix)
                ])
            inline_keyboard_drive_ids.append([
                InlineKeyboardButton(
                    'Select this folder({})'.format(current_folder_name),
                    callback_data='chosen_folder,{}'.format(current_folder_id))
            ])
    inline_keyboard_drive_ids.append([
        InlineKeyboardButton(
            'Back to top',
            callback_data='choose_folder' if current_folder_id else '#'),
        InlineKeyboardButton('cancel', callback_data='cancel')
    ])
    context.bot.edit_message_text(
        chat_id=update.effective_chat.id,
        message_id=message_id,
        text='Select the directory to save, a total of {} subdirectories'.
        format(folders_len),
        reply_markup=InlineKeyboardMarkup(inline_keyboard_drive_ids))
Exemplo n.º 4
0
def get_warning(update, context):
    query = update.callback_query
    alert_users(context, update.effective_user, 'unknown query data',
                query.data)
    query.answer(text='Yo-he!', show_alert=True)
Exemplo n.º 5
0
def choose_folder(update, context):
    current_folder_id = ''
    folders = None

    try:
        gd = GoogleDrive(update.effective_user.id)
    except Exception as e:
        context.bot.send_message(chat_id=update.effective_user.id,
                                 text='请确认SA已正确上传,并配置收藏文件夹。\n'
                                 '<code>{}</code>'.format(html.escape(str(e))),
                                 parse_mode=ParseMode.HTML)
        return

    if context.args:
        current_folder_id = context.args[0]
        try:
            gd.get_file_name(current_folder_id)
            folders = gd.list_folders(current_folder_id)
        except Exception as e:
            folders = gd.get_drives()
            current_folder_id = ''
            context.bot.send_message(chat_id=update.effective_user.id,
                                     text='错误:\n<code>{}</code>'.format(
                                         html.escape(str(e))),
                                     parse_mode=ParseMode.HTML)

    callback_query_prefix = 'choose_folder'
    query = update.callback_query
    page = None
    message_id = -1
    if not query:
        rsp = update.message.reply_text('获取目录...')
        rsp.done.wait(timeout=60)
        message_id = rsp.result().message_id
        if not folders:
            # folders = context.user_data.get(udkey_fav_drives, None)
            folders = gd.get_drives()
            context.user_data[udkey_folders_cache] = copy.deepcopy(folders)

    if query:
        logger.debug('{}: {}'.format(update.effective_user.id, query.data))
        if query.message.chat_id < 0 and \
                (not query.message.reply_to_message or
                 query.from_user.id != query.message.reply_to_message.from_user.id):
            alert_users(context, update.effective_user, 'invalid caller',
                        query.data)
            query.answer(text='哟呵', show_alert=True)
            return
        message_id = query.message.message_id
        match = re.search(
            r'^(?P<un>un)?{}(?P<replace>_replace)?(?:_page#(?P<page>\d+))?'
            r'(?:,(?P<folder_id>[\dA-Za-z\-_]+))?$'.format(
                callback_query_prefix), query.data)
        if match:
            match_folder_id = match.group('folder_id')
            if match_folder_id:
                current_folder_id = match_folder_id
                try:
                    gd.get_file_name(current_folder_id)
                    folders = gd.list_folders(match_folder_id)
                except Exception as e:
                    folders = gd.get_drives()
                    current_folder_id = ''
                    context.bot.send_message(
                        chat_id=update.effective_user.id,
                        text='错误:\n<code>{}</code>'.format(html.escape(
                            str(e))),
                        parse_mode=ParseMode.HTML)
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
                if not folders:
                    folders = {'#': '(无子文件夹)'}
                match_folder_id_replace = match.group('replace')
                if match_folder_id_replace:
                    context.user_data[
                        udkey_fav_folders_replace] = match_folder_id
            if match.group('page'):
                page = int(match.group('page'))
            if not folders and match.group('page'):
                folders = context.user_data.get(udkey_folders_cache, None)
            if not folders:
                # folders = context.user_data.get(udkey_fav_drives, None)
                folders = gd.get_drives()
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
            if not folders:
                folders = {'#': '未收藏团队盘,先收藏才能操作。'}
        else:
            alert_users(context, update.effective_user, 'invalid query data',
                        query.data)
            query.answer(text='哟呵', show_alert=True)
            return

    if not page:
        page = 1

    folders_len = len(folders)
    page_data = []
    for item in folders:
        page_data.append({'text': folders[item], 'data': item})

    page_data_chosen = list(context.user_data.get(udkey_folders, {}))
    inline_keyboard_drive_ids = get_inline_keyboard_pagination_data(
        callback_query_prefix,
        page_data,
        page_data_chosen=page_data_chosen,
        page=page,
        max_per_page=10,
    )

    if current_folder_id:
        current_path = ''
        current_path_list = gd.get_file_path_from_id(current_folder_id)
        if current_path_list:
            current_folder_name = current_path_list[0]['name']
            for item in current_path_list:
                current_path = '/{}{}'.format(item['name'], current_path)
            if len(current_path_list) > 1:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton(
                        '📁' + current_path,
                        callback_data='{},{}'.format(
                            callback_query_prefix,
                            current_path_list[1]['folder_id']))
                ])
            else:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton('📁' + current_path,
                                         callback_data=callback_query_prefix)
                ])
            inline_keyboard_drive_ids.append([
                InlineKeyboardButton(
                    '选择本文件夹({})'.format(current_folder_name),
                    callback_data='chosen_folder,{}'.format(current_folder_id))
            ])
    inline_keyboard_drive_ids.append([
        InlineKeyboardButton(
            '返回顶层',
            callback_data='choose_folder' if current_folder_id else '#'),
        InlineKeyboardButton('取消', callback_data='cancel')
    ])
    context.bot.edit_message_text(
        chat_id=update.effective_chat.id,
        message_id=message_id,
        text='选择要保存的目录,共{}个子目录'.format(folders_len),
        reply_markup=InlineKeyboardMarkup(inline_keyboard_drive_ids))
Exemplo n.º 6
0
def choose_folder(update, context):
    current_folder_id = ''
    folders = None

    try:
        gd = GoogleDrive(update.effective_user.id)
    except Exception as e:
        context.bot.send_message(
            chat_id=update.effective_user.id,
            text=
            '🔸 𝗟ü𝘁𝗳𝗲𝗻 𝗦𝗔  𝘆ü𝗸𝗹𝗲𝗻𝗱𝗶ğ𝗶𝗻𝗱𝗲𝗻 𝘃𝗲 𝗸𝗹𝗮𝘀ö𝗿ü𝗻ü𝗻 𝘆𝗮𝗽ı𝗹𝗮𝗻𝗱ı𝗿ı𝗹𝗱ığı𝗻𝗱𝗮𝗻 𝗲𝗺𝗶𝗻 𝗼𝗹𝘂𝗻..\n'
            '<code>{}</code>'.format(html.escape(str(e))),
            parse_mode=ParseMode.HTML)
        return

    if context.args:
        current_folder_id = context.args[0]
        try:
            gd.get_file_name(current_folder_id)
            folders = gd.list_folders(current_folder_id)
        except Exception as e:
            folders = gd.get_drives()
            current_folder_id = ''
            context.bot.send_message(chat_id=update.effective_user.id,
                                     text='Error:\n<code>{}</code>'.format(
                                         html.escape(str(e))),
                                     parse_mode=ParseMode.HTML)

    callback_query_prefix = 'choose_folder'
    query = update.callback_query
    page = None
    message_id = -1
    if not query:
        rsp = update.message.reply_text('⚙️ 𝕯𝖎𝖟𝖎𝖓 𝖆𝖑ı𝖓ı𝖞𝖔𝖗...')
        rsp.done.wait(timeout=60)
        message_id = rsp.result().message_id
        if not folders:
            folders = gd.get_drives()
            context.user_data[udkey_folders_cache] = copy.deepcopy(folders)

    if query:
        logger.debug('{}: {}'.format(update.effective_user.id, query.data))
        if query.message.chat_id < 0 and \
                (not query.message.reply_to_message or
                 query.from_user.id != query.message.reply_to_message.from_user.id):
            alert_users(context, update.effective_user, 'invalid caller',
                        query.data)
            query.answer(text='Yo-he!', show_alert=True)
            return
        message_id = query.message.message_id
        match = re.search(
            r'^(?P<un>un)?{}(?P<replace>_replace)?(?:_page#(?P<page>\d+))?'
            r'(?:,(?P<folder_id>[\dA-Za-z\-_]+))?$'.format(
                callback_query_prefix), query.data)
        if match:
            match_folder_id = match.group('folder_id')
            if match_folder_id:
                current_folder_id = match_folder_id
                try:
                    gd.get_file_name(current_folder_id)
                    folders = gd.list_folders(match_folder_id)
                except Exception as e:
                    folders = gd.get_drives()
                    current_folder_id = ''
                    context.bot.send_message(
                        chat_id=update.effective_user.id,
                        text='⁉️ Error:\n<code>{}</code>'.format(
                            html.escape(str(e))),
                        parse_mode=ParseMode.HTML)
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
                if not folders:
                    folders = {'#': '(No subfolders)'}
                match_folder_id_replace = match.group('replace')
                if match_folder_id_replace:
                    context.user_data[
                        udkey_fav_folders_replace] = match_folder_id
            if match.group('page'):
                page = int(match.group('page'))
            if not folders and match.group('page'):
                folders = context.user_data.get(udkey_folders_cache, None)
            if not folders:
                folders = gd.get_drives()
                context.user_data[udkey_folders_cache] = copy.deepcopy(folders)
            if not folders:
                folders = {
                    '#':
                    'Ortak sürücünüz yoksa bir tane olmak için @kamileecher1.'
                }
        else:
            alert_users(context, update.effective_user, 'invalid query data',
                        query.data)
            query.answer(text='Yo-he!', show_alert=True)
            return

    if not page:
        page = 1

    folders_len = len(folders)
    page_data = []
    for item in folders:
        page_data.append({'text': folders[item], 'data': item})

    page_data_chosen = list(context.user_data.get(udkey_folders, {}))
    inline_keyboard_drive_ids = get_inline_keyboard_pagination_data(
        callback_query_prefix,
        page_data,
        page_data_chosen=page_data_chosen,
        page=page,
        max_per_page=10,
    )

    if current_folder_id:
        current_path = ''
        current_path_list = gd.get_file_path_from_id(current_folder_id)
        if current_path_list:
            current_folder_name = current_path_list[0]['name']
            for item in current_path_list:
                current_path = '/{}{}'.format(item['name'], current_path)
            if len(current_path_list) > 1:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton(
                        '📁 ' + current_path,
                        callback_data='{},{}'.format(
                            callback_query_prefix,
                            current_path_list[1]['folder_id']))
                ])
            else:
                inline_keyboard_drive_ids.insert(0, [
                    InlineKeyboardButton('📁' + current_path,
                                         callback_data=callback_query_prefix)
                ])
            inline_keyboard_drive_ids.append([
                InlineKeyboardButton(
                    '✔️ Select this folder({})'.format(current_folder_name),
                    callback_data='chosen_folder,{}'.format(current_folder_id))
            ])
    inline_keyboard_drive_ids.append([
        InlineKeyboardButton(
            '🔙 Go back',
            callback_data='choose_folder' if current_folder_id else '#'),
        InlineKeyboardButton('Cancel', callback_data='cancel')
    ])
    context.bot.edit_message_text(
        chat_id=update.effective_chat.id,
        message_id=message_id,
        text=
        '🔶 Select the directory you want to use, there are {} subdirectories.'.
        format(folders_len),
        reply_markup=InlineKeyboardMarkup(inline_keyboard_drive_ids))