Ejemplo n.º 1
0
def glitch_image(bot: BOT, message: Message):
    if not message.reply_to_message:
        message.edit("`.glitch` needs to be a reply.")
        sleep(2)

    elif message.reply_to_message:
        try:
            glitch_amount = int(message.command[1])
        except (IndexError, ValueError):
            glitch_amount = 1

        glitch_this = message.reply_to_message.download()
        glitch_ext = glitch_this.split(".")[-1].lower()

        if glitch_ext in ('jpg', 'jpeg'):
            for _ in range(glitch_amount):
                glitched = glitchart.jpeg(photo=glitch_this, inplace=True)
            bot.send_photo(chat_id=message.chat.id,
                           photo=glitched,
                           caption=f"{glitch_amount} iterations"
                           if glitch_amount > 1 else "",
                           reply_to_message_id=ReplyCheck(message))

    message.delete()
    rmtree('downloads')
Ejemplo n.º 2
0
def make_poll(bot: BOT, message: Message):
    cmd = message.command
    if message.chat.type == 'private':
        message.edit("Polls are not supported in private chats")
        sleep(2)
        message.delete()
        return
    if len(cmd) == 1:
        message.edit("I need a question")
        sleep(2)
        message.delete()
    elif len(cmd) > 1:
        poll = message.text[6:].split('\n')
        if len(poll[1:]) < 2:
            message.edit("I need at least two answers")
        elif len(poll[1:]) > 10:
            message.edit("A poll can only have 10 answers")
        else:
            sent_poll = BOT.send_poll(
                chat_id=message.chat.id,
                question=poll[0],
                options=poll[1:],
                reply_to_message_id=ReplyCheck(message))
            message.edit("Poll created")
            LogMessage(
                POLL_LOG.format(
                    sent_poll,
                    str(sent_poll.chat.id).replace("-100", "")))
            message.delete()
Ejemplo n.º 3
0
def get_members(bot: BOT, message: Message):
    if message.chat.type == 'private':
        message.delete()

    else:
        total = 0
        admins = 0
        members = 0
        bots = 0
        deleted = 0

        for member in BOT.iter_chat_members(message.chat.id):
            total += 1
            if member.user.is_bot:
                bots += 1
            elif member.user.is_deleted:
                deleted += 1
            elif member.status in ['creator', 'administrator']:
                admins += 1
            elif not member.user.is_deleted and not member.user.is_bot:
                members += 1

        member_count_text = MEMBER_INFO.format(message.chat.title, total,
                                               admins, members, bots, deleted)

        message.edit(member_count_text)
        LogMessage(member_count_text)
Ejemplo n.º 4
0
def PrivateCheck(message: Message):
    if message.chat.type == 'private':
        message.edit("Welcome messages are not supported in Private Chats.")
        sleep(2)
        message.delete()
        return None
    return True
Ejemplo n.º 5
0
def mock_people(bot: BOT, message: Message):
    cmd = message.command

    if len(cmd) > 1:
        mock_text = " ".join(cmd[1:])
    elif message.reply_to_message and len(cmd) == 1:
        mock_text = message.reply_to_message.text
    elif not message.reply_to_message and len(cmd) == 1:
        message.edit("I need something to mock")
        sleep(2)
        message.delete()
        return

    mock_results = BOT.get_inline_bot_results("stickerizerbot",
                                              "#7" + mock_text)
    try:
        BOT.send_inline_bot_result(chat_id=message.chat.id,
                                   query_id=mock_results.query_id,
                                   result_id=mock_results.results[0].id,
                                   reply_to_message_id=ReplyCheck(message),
                                   hide_via=True)
    except TimeoutError:
        message.edit("@StickerizerBot didn't respond in time.")
        sleep(2)
    message.delete()
Ejemplo n.º 6
0
def get_file(bot: BOT, message: Message):
    file_id = None

    if message.reply_to_message:
        rep = message.reply_to_message
        if rep.audio:
            file_id = rep.audio.file_id
        elif rep.document:
            file_id = rep.document.file_id
        elif rep.photo:
            file_id = rep.photo.sizes[-1].file_id
        elif rep.sticker:
            file_id = rep.sticker.file_id
        elif rep.video:
            file_id = rep.video.file_id
        elif rep.animation:
            file_id = rep.animation.file_id
        elif rep.voice:
            file_id = rep.voice.file_id
        elif rep.video_note:
            file_id = rep.video_note.file_id
        elif rep.contact:
            file_id = rep.contact.file_id
        elif rep.location:
            file_id = rep.location.file_id
        elif rep.venue:
            file_id = rep.venue.file_id

    if not file_id:
        message.edit("This chat's ID:\n`{}`".format(message.chat.id))
    else:
        message.edit("File_ID:\n`{}`".format(file_id))
Ejemplo n.º 7
0
def google_sticker(bot: BOT, message: Message):
    cmd = message.command

    if len(cmd) > 1:
        ggl_text = " ".join(cmd[1:])
    elif message.reply_to_message and len(cmd) == 1:
        ggl_text = message.reply_to_message.text
    elif not message.reply_to_message and len(cmd) == 1:
        message.edit("I need something to google")
        sleep(2)
        message.delete()
        return

    try:
        ggl_result = BOT.get_inline_bot_results("stickerizerbot",
                                                "#12" + ggl_text)
        BOT.send_inline_bot_result(chat_id=message.chat.id,
                                   query_id=ggl_result.query_id,
                                   result_id=ggl_result.results[0].id,
                                   reply_to_message_id=ReplyCheck(message),
                                   hide_via=False)
    except TimeoutError:
        message.edit("@StickerizerBot didn't respond in time.")
        sleep(2)
    message.delete()
Ejemplo n.º 8
0
def neardc(bot: BOT, message: Message):
    dc = BOT.send(
        functions.help.GetNearestDc())
    message.edit(
        NearestDC.format(
            dc.country,
            dc.nearest_dc,
            dc.this_dc))
Ejemplo n.º 9
0
def format_blank(bot: BOT, message: Message):
    if message.reply_to_message:
        GiveReplyObj(message).edit(
            "󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰"
        )
        message.delete()
    else:
        message.edit(
            "󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰󠇰"
        )
Ejemplo n.º 10
0
def format_blank(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't...__")
        sleep(2)
        message.delete()
        return

    message.edit(' '.join(format(ord(x), 'b') for x in cmdstr))
Ejemplo n.º 11
0
def format_blank(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't...__")
        sleep(2)
        message.delete()
        return

    message.edit(hashlib.sha384(cmdstr.encode('utf-8')).hexdigest())
Ejemplo n.º 12
0
def evaluation(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't paste nothing sadly...__")
        sleep(2)
        message.delete()
        return

    if cmdstr:
        message.edit(post(cmdstr))  ## Making the Paste and give out the Link for the Response
Ejemplo n.º 13
0
def flipacoin(bot: BOT, message: Message):

    Nummer = randint(1, 2)

    if Nummer == 1:

        message.edit("Heads!", disable_web_page_preview=True)

    else:

        message.edit("Tails!", disable_web_page_preview=True)
Ejemplo n.º 14
0
def unban(bot: BOT, message: Message):
    if ReplyCheck(message) is True and AdminCheck(message) is True:
        try:
            BOT.unban_chat_member(
                chat_id=message.chat.id,
                user_id=message.reply_to_message.from_user.id)
            message.edit(UNBANNED.format(message))
            LogMessage(UNBANNED_LOG.format(
                message,
                str(message.chat.id).replace("-100", "")))
        except UserAdminInvalid:
            message.edit("I can't unban this user")
Ejemplo n.º 15
0
def all_welcome(bot: BOT, message: Message):
    db = sqlite3.connect(PYRO_DB)
    c = db.cursor()
    c.execute(ALL_WELCOME)
    res = c.fetchall()
    if res:
        welcome_messages = "**All Welcome Messages:**\n"
        for welcome in res:
            welcome_messages += f"\n👉 **{welcome[0]}**\n{unescape(welcome[1])}\n"
        BOT.send_message('me', welcome_messages, disable_web_page_preview=True)
        message.edit("Welcome messages sent in Saved Messages.")
        sleep(2)
        message.delete()
Ejemplo n.º 16
0
def list_vids(bot: BOT, message: Message):
    db = sqlite3.connect(PYRO_DB)
    c = db.cursor()
    c.execute(LIST_NOTES)
    result = c.fetchall()
    res = [i[0] for i in result]
    notes = "**List of available Videnotes:**\n`.note [name]`\n"
    for note in sorted(res):
        notes += f"→ `{note}`\n"
    BOT.send_message("me", notes)
    message.edit("List of available Videonotes sent in Saved Mesages")
    sleep(2)
    message.delete()
Ejemplo n.º 17
0
def set_afk(bot: BOT, message: Message):
    afk_text = message.text.markdown[5:]
    checker = 1
    db = sqlite3.connect(PYRO_DB)
    c = db.cursor()
    c.execute(REMOVE_AFKTEXT.format(message.chat.id))
    db.commit()
    db = sqlite3.connect(PYRO_DB)
    c = db.cursor()
    c.execute(SET_AFKTEXT.format(escape(afk_text), checker))
    message.edit(f"AFK message set:\n{afk_text[1:]}",
                 disable_web_page_preview=True)
    db.commit()
Ejemplo n.º 18
0
def DFromUToTelegramProgress(
    current: int, total: int, msg: pyrogram.Message, text: str, start: float
) -> None:
    """
    Use this method to update the progress of a download from/an upload to Telegram, this method is called every 512KB.
    Update message every ~4 seconds.

    client (:class:`Client <pyrogram.Client>`): The Client itself.

    current (``int``): Currently downloaded/uploaded bytes.

    total (``int``): File size in bytes.

    msg (:class:`Message <pyrogram.Message>`): The Message to update while downloading/uploading the file.

    text (``str``): Text to put into the update.

    start (``str``): Time when the operation started.


    Returns ``None``.
    """
    # 1048576 is 1 MB in bytes
    now = time.time()
    diff = now - start
    if round(diff % 4.00) == 0 or current == total:
        percentage = current * 100 / total
        speed = current / diff
        elapsed_time = round(diff) * 1000
        time_to_completion = round((total - current) / speed) * 1000
        estimated_total_time = elapsed_time + time_to_completion

        elapsed_time = TimeFormatter(milliseconds=elapsed_time)
        estimated_total_time = TimeFormatter(milliseconds=estimated_total_time)
        # 0% = [░░░░░░░░░░░░░░░░░░░░]
        # 100% = [████████████████████]
        progress = "[{0}{1}] {2}%\n".format(
            "".join("█" for i in range(math.floor(percentage / 5))),
            "".join("░" for i in range(20 - math.floor(percentage / 5))),
            round(percentage, 2),
        )
        tmp = progress + "{0}/{1}\n{2}/s {3}/{4}\n".format(
            SizeFormatter(b=current * 8, human_readable=True),
            SizeFormatter(b=total * 8, human_readable=True),
            SizeFormatter(b=speed * 8, human_readable=True),
            elapsed_time if elapsed_time != "" else "0 s",
            estimated_total_time if estimated_total_time != "" else "0 s",
        )

        msg.edit(text=text + tmp)
Ejemplo n.º 19
0
def who_is(bot: BOT, message: Message):
    cmd = message.command
    if not message.reply_to_message and len(cmd) == 1:
        get_user = message.from_user.id
    elif message.reply_to_message and len(cmd) == 1:
        get_user = message.reply_to_message.from_user.id
    elif len(cmd) > 1:
        get_user = cmd[1]
        try:
            get_user = int(cmd[1])
        except ValueError:
            pass
    try:
        user = BOT.get_users(get_user)
    except PeerIdInvalid:
        message.edit("I don't know that User.")
        sleep(2)
        message.delete()
        return
    desc = BOT.get_chat(get_user).description
    user_pic = BOT.get_user_profile_photos(user.id)
    common = GetCommon(user.id)

    if not user.photo:
        message.edit(WHOIS.format(
            full_name=FullName(user),
            user_id=user.id,
            first_name=user.first_name,
            last_name=user.last_name if user.last_name else "",
            username=user.username if user.username else "",
            last_online=LastOnline(user),
            common_groups=len(common.chats),
            bio=desc if desc else "`No bio set up.`"),
                     disable_web_page_preview=True)
    elif user.photo:
        BOT.send_photo(message.chat.id,
                       user_pic.photos[0].sizes[-1].file_id,
                       WHOIS_PIC.format(
                           full_name=FullName(user),
                           user_id=user.id,
                           first_name=user.first_name,
                           last_name=user.last_name if user.last_name else "",
                           username=user.username if user.username else "",
                           last_online=LastOnline(user),
                           profile_pics=user_pic.total_count,
                           common_groups=len(common.chats),
                           bio=desc if desc else "`No bio set up.`",
                           profile_pic_update=ProfilePicUpdate(user_pic)),
                       reply_to_message_id=ReplyCheck(message))
        message.delete()
Ejemplo n.º 20
0
def get_welcome(bot: BOT, message: Message):
    if PrivateCheck(message):
        db = sqlite3.connect(PYRO_DB)
        c = db.cursor()
        c.execute(GET_WELCOME.format(message.chat.id))
        res = c.fetchone()
        if res:
            message.edit("__This chats welcome message:__\n\n" +
                         unescape(res[0]),
                         disable_web_page_preview=True)
        else:
            message.edit("__There is no welcome message for this chat.__")
        sleep(3)
        message.delete()
Ejemplo n.º 21
0
def save_note(bot: BOT, message: Message):
    cmd = message.command
    try:
        cmd[1]
    except IndexError:
        message.edit("I need a name to save to...")
        sleep(2)
        message.delete()
        return

    note = BOT.send_video_note(
        chat_id='me',
        video_note=message.reply_to_message.download('./note.mp4'))
    note.delete()
    os.remove('./note.mp4')
    db = sqlite3.connect(PYRO_DB)
    c = db.cursor()
    try:
        c.execute(SAVE_NOTE.format(cmd[1], note.video_note.file_id))
    except sqlite3.IntegrityError:
        message.edit(f'Videonote "`{cmd[1]}`" already saved.')
        return
    except AttributeError:
        message.edit(
            f"The video needs an aspect:ratio of 1:1, otherwise it can't be a videonote."
        )
        sleep(3)
        message.delete()
        return
    db.commit()
    db.close()
    message.edit(f'Videnote saved as `{cmd[1]}`.')
    sleep(2)
    message.delete()
Ejemplo n.º 22
0
def get_admins(bot: BOT, message: Message):
    if message.chat.type == 'private':
        message.edit("There are no admins in private chats...")
        sleep(2)
        message.delete()

    else:
        all_admins = BOT.iter_chat_members(chat_id=message.chat.id,
                                           filter='administrators')
        creator = None
        admins = []

        for admin in all_admins:
            if admin.status == 'creator':
                creator = admin
            elif admin.status == 'administrator':
                admins.append(admin)
        sorted_admins = sorted(admins, key=lambda usid: usid.user.id)

        AdminList = ADMINTITLE.format(message.chat.title)

        if creator:
            AdminList += ADMINCREATOR.format(
                str(creator.user.id).rjust(10), creator.user.first_name,
                creator.user.id)

        AdminList += "╔ **Admins**\n"
        for admin in sorted_admins:
            if admin is sorted_admins[-1]:
                if admin.user.is_bot:
                    AdminList += ADMINLISTLASTBOT.format(
                        str(admin.user.id).rjust(10), admin.user.first_name,
                        admin.user.id)
                else:
                    AdminList += ADMINLISTLAST.format(
                        str(admin.user.id).rjust(10), admin.user.first_name,
                        admin.user.id)
            else:
                if admin.user.is_bot:
                    AdminList += ADMINLISTBOT.format(
                        str(admin.user.id).rjust(10), admin.user.first_name,
                        admin.user.id)
                else:
                    AdminList += ADMINLIST.format(
                        str(admin.user.id).rjust(10), admin.user.first_name,
                        admin.user.id)

        message.edit(AdminList)
        LogMessage(AdminList)
Ejemplo n.º 23
0
def remove_welcome(bot: BOT, message: Message):
    if PrivateCheck(message):
        db = sqlite3.connect(PYRO_DB)
        c = db.cursor()
        c.execute(GET_WELCOME.format(message.chat.id))
        res = c.fetchone()
        if res:
            c.exeute(REMOVE_WELCOME.format(message.chat.id))
            db.commit()
            message.edit("__Removed welcome message:__\n\n" + unescape(res[0]),
                         disable_web_page_preview=True)
        else:
            message.edit("There was no welcome message.")
        sleep(3)
        message.delete()
Ejemplo n.º 24
0
def kick_user(bot: BOT, message: Message):
    if ReplyCheck(message) is True and AdminCheck(message) is True:
        try:
            BOT.kick_chat_member(
                chat_id=message.chat.id,
                user_id=message.reply_to_message.from_user.id,
                until_date=0)
            BOT.unban_chat_member(
                chat_id=message.chat.id,
                user_id=message.reply_to_message.from_user.id)
            message.edit(KICKED.format(message))
            LogMessage(KICKED_LOG.format(
                message,
                str(message.chat.id).replace("-100", "")))
        except UserAdminInvalid:
            RestrictFailed(message)
Ejemplo n.º 25
0
def cc_gif(bot: BOT, message: Message):
    try:  # delete if file still exists
        os.remove("animation.mp4")
        os.remove("animation.1.mp4")
    except FileNotFoundError:
        pass

    try:
        conv_url = message.command[1]
    except IndexError:
        message.edit("No URL to convert")
        return
    conv_ext = re.findall(r"\w+$", conv_url)

    try:
        message.edit("`Converting . . .`")
        process = ccapi.convert({
            'inputformat': conv_ext[0],
            'outputformat': 'mp4',
            'input': 'download',
            'file': conv_url,
            'filename': f'animation.{conv_ext[0]}',
            'converteroptions': {
                'command': CC_Convert
            }
        })
        process.wait()
        message.edit("`Downloading . . .`")
        process.download()
    except cloudconvert.exceptions.APIError as e:
        message.edit(f"Error: {e}\n{conv_url}", disable_web_page_preview=True)
        return

    message.edit("`Uploading . . .`")

    try:
        BOT.send_animation(chat_id=message.chat.id, animation="animation.mp4")
    except errors.FileIdInvalid:
        BOT.send_animation(chat_id=message.chat.id,
                           animation="animation.1.mp4")
    message.delete()
    try:
        os.remove("animation.mp4")
        os.remove("animation.1.mp4")
    except FileNotFoundError:
        pass
Ejemplo n.º 26
0
def evaluation(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't evaluate nothing...__")
        sleep(2)
        message.delete()
        return

    if cmdstr:
        expr = message.reply(RUNNING.format(cmdstr))

        try:
            result = eval(cmdstr)
        except Exception as err:
            expr.edit(ERROR.format(cmdstr, err))
            LogMessage(
                ERROR_LOG.format(cmdstr, message.chat.title
                                 or message.chat.first_name,
                                 str(message.chat.id).replace("-100", ""),
                                 str(expr.message_id), err))

        else:

            if result is None:
                expr.edit(SUCCESS.format(cmdstr))
                LogMessage(
                    SUCCESS_LOG.format(
                        cmdstr, message.chat.title or message.chat.first_name,
                        str(message.chat.id).replace("-100", ""),
                        str(expr.message_id)))

            elif len(RESULT.format(cmdstr, result)) > 4096:
                expr.edit(RESULT_FILE.format(cmdstr))
                BOT.send_chat_action(message.chat.id, "upload_document")
                SendLong(expr, cmdstr, result)

            else:
                expr.edit(RESULT.format(cmdstr, result))

            LogMessage(
                RESULT_LOG.format(
                    cmdstr, message.chat.title or message.chat.first_name,
                    str(message.chat.id).replace("-100", ""),
                    str(expr.message_id)))
Ejemplo n.º 27
0
def ban_hammer(bot: BOT, message: Message):
    if ReplyCheck(message) is True and AdminCheck(message) is True:
        try:
            BOT.kick_chat_member(
                chat_id=message.chat.id,
                user_id=message.reply_to_message.from_user.id,
                until_date=Timer(message))
            if len(message.command) > 1:
                message.edit(BANNED_TIME.format(
                    message,
                    TimerString(message)))
            else:
                message.edit(BANNED.format(message))
            LogMessage(BANNED_LOG.format(
                message,
                str(message.chat.id).replace("-100", "")))
        except UserAdminInvalid:
            RestrictFailed(message)
Ejemplo n.º 28
0
def pay_respect(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't replace nothing...__")
        sleep(2)
        message.delete()
        return
    replacelist = cmdstr.split(";")
    reply = GiveReplyObj(message)

    if message == reply:
        replacelist = cmdstr.split(";")
        replytext = rot(replacelist[0])(replacelist[1])
        reply.edit(replytext)
    else:
        replytext = rot(int(cmdstr))(reply.text)
        reply.edit(replytext)
        message.delete()
Ejemplo n.º 29
0
def pay_respect(bot: BOT, message: Message):
    try:
        cmdstr = " ".join(message.command[1:])
    except IndexError:
        message.edit("__I can't replace nothing...__")
        sleep(2)
        message.delete()
        return
    replacelist = cmdstr.split(";")
    reply = GiveReplyObj(message)

    try:
        reply.edit(reply.text.replace(replacelist[0], replacelist[1]))
    except IndexError:
        message.edit("__I can't replace nothing...__")
        sleep(2)
        message.delete()
        return
    message.delete()
Ejemplo n.º 30
0
def randomnumber(bot: BOT, message: Message):

    try:

        cmdstr = " ".join(message.command[1:])

    except IndexError:

        message.edit("__I can't randomize nothing sadly...__")

        sleep(2)

        message.delete()

        return

    number = [int(s) for s in re.findall(r'\b\d+\b', cmdstr)]

    message.edit(ranint(number[0], number[1]), disable_web_page_preview=True)