Esempio n. 1
0
def rotate(c: Client, msg: Message):
    targetmsg = msg.reply_to_message

    if not (targetmsg.photo or targetmsg.sticker):
        msg.edit_text("Reply to a sticker or photo!")
        return 1

    msg.delete()

    rotation = (
        180  # If rotation is 90, 180 or 270 there are constants like Image.ROTATE_180
    )

    if len(msg.command) > 1:
        try:
            rotation = int(msg.command[1])
        except ValueError:  # ValueError: invalid literal for int() with base 10
            pass

    image = get_image(targetmsg)

    rotated = image.rotate(rotation, PIL.Image.BICUBIC)

    c.send_photo(
        msg.chat.id,
        save_image(rotated),
        caption="<b>Rotated {} degrees</b>".format(rotation),
        reply_to_message_id=targetmsg.message_id,
    )
def resolve_invite(_, message: Message):
    link = message.command[1].split("/")[-1]
    d = urlsafe_b64decode(link + "==")
    message.edit_text(
        "Invite Link: `{}`\nAdmin: `{}`\nChat: `-100{}`\nHash: `{}`".format(
            link, *unpack(">iiq", d)
        )
    )
Esempio n. 3
0
def paste_command(c: Client, msg: Message):
    msg.edit_text("Pasting...")
    if msg.reply_to_message.document:

        path = "tmp/{}".format("".join(
            random.choices(string.ascii_letters, k=30)))
        msg.reply_to_message.download(file_name=path)

        try:
            text = open(path).read()
        except UnicodeDecodeError:
            msg.edit_text(
                "Please reply to a document or a message with some text")
            return 1

    else:
        text = msg.reply_to_message.text or msg.reply_to_message.caption

    if not text:
        msg.edit_text("Please reply to a document or a message with some text")
        return 1

    key = Nekobin.paste(text)
    msg.edit_text(
        f"{emoji.GLOBE_WITH_MERIDIANS} Paste {emoji.GLOBE_WITH_MERIDIANS}\n"
        f"\n"
        f"{emoji.LINK} Url: https://nekobin.com/{key}\n"
        f"{emoji.NEWSPAPER} Raw: https://nekobin.com/raw/{key} \n"
        f"\n",
        disable_web_page_preview=True,
    )
Esempio n. 4
0
async def rem_user(_, message: Message) -> None:
    """Remove AI for a user."""
    if not message.reply_to_message:
        message.edit_text("You've gotta reply to someone!")
        return
    user_id = message.reply_to_message.from_user.id
    is_user = db.is_user(user_id)
    if not is_user:
        await message.edit_text(
            "AI isn't enabled for this user in the first place!")
    else:
        db.rem_user(user_id)
        await message.edit_text("AI disabled for this user successfully!")
        LOGGER.info(f"AI disabled for user - {user_id}")
Esempio n. 5
0
def upscale(c: Client, msg: Message):
    if not (msg.reply_to_message.photo or msg.reply_to_message.document):
        msg.edit_text("Please reply to a photo or document")
        return 1
    if msg.reply_to_message.document:
        logging.warning("Documents aren't always upscalable.")

    fname = "tmp/" + "".join(random.choices(
        string.ascii_letters, k=30)) + ".jpeg"  # Photos are sent as jpeg
    msg.reply_to_message.download(file_name=fname,
                                  progress=download_update,
                                  progress_args=(msg, ))

    msg.edit_text("Upscaling...\n" "[{s}????{s}] ??%".format(s=" " * 8))

    try:
        ufname = "tmp/" + "".join(random.choices(
            string.ascii_letters, k=30)) + ".png"  # Photos are recived in .png
        open(ufname, "wb").write(imu.upscale(fname))
    except InternalServerError:
        msg.edit_text("Document not valid!")
        return 1

    msg.edit_text("Uploading...\n" "[{s}????{s}] ??%".format(s=" " * 8))
    c.send_photo(msg.chat.id,
                 ufname,
                 reply_to_message_id=msg.reply_to_message.message_id,
                 caption="<b>Upscaled</b>")
    msg.delete()
Esempio n. 6
0
async def add_user(_, message: Message) -> None:
    """Enable AI for a user."""
    if not message.reply_to_message:
        message.edit_text(
            "Reply to someone to enable chatbot for that person!")
        return
    user_id = message.reply_to_message.from_user.id
    is_user = db.is_user(user_id)
    if not is_user:
        ses = api_client.create_session()
        ses_id = str(ses.id)
        expires = str(ses.expires)
        db.set_ses(user_id, ses_id, expires)
        await message.edit_text("AI enabled for user successfully!")
        LOGGER.info(f"AI enabled for user - {user_id}")
    else:
        await message.edit_text("AI is already enabled for this user!")
Esempio n. 7
0
def read_only(client: Client, message: Message):
    mute_seconds: int = 0
    for character in 'mhdw':
        match = re.search(rf'(\d+|(\d+\.\d+)){character}',
                          message.text)  # Searching for a terms
        if match:  # calculating seconds if found valid term
            if character == 'm':
                mute_seconds += int(
                    float(match.string[match.start():match.end() - 1]) * 60 //
                    1)
            if character == 'h':
                mute_seconds += int(
                    float(match.string[match.start():match.end() - 1]) *
                    3600 // 1)
            if character == 'd':
                mute_seconds += int(
                    float(match.string[match.start():match.end() - 1]) *
                    86400 // 1)
            if character == 'w':
                mute_seconds += int(
                    float(match.string[match.start():match.end() - 1]) *
                    604800 // 1)
    if mute_seconds > 30:
        try:
            client.restrict_chat_member(message.chat.id,
                                        message.reply_to_message.from_user.id,
                                        ChatPermissions(),
                                        int(time()) + mute_seconds)
            from_user = message.reply_to_message.from_user
            mute_time: Dict[str, int] = {
                'days': mute_seconds // 86400,
                'hours': mute_seconds % 86400 // 3600,
                'minutes': mute_seconds % 86400 % 3600 // 60
            }
            message_text = f"<a href=\"tg://user?id={from_user.id}\">{from_user.first_name}" \
                           f"{from_user.last_name if from_user.last_name else ''}</a>" \
                           f" {('(@' + from_user.username + ')') if from_user.username else ''} was muted for" \
                           f" {((str(mute_time['days']) + ' day') if mute_time['days'] > 0 else '') + ('s' if mute_time['days'] > 1 else '')}" \
                           f" {((str(mute_time['hours']) + ' hour') if mute_time['hours'] > 0 else '') + ('s' if mute_time['hours'] > 1 else '')}" \
                           f" {((str(mute_time['minutes']) + ' minute') if mute_time['minutes'] > 0 else '') + ('s' if mute_time['minutes'] > 1 else '')}"
            while '  ' in message_text:
                message_text = message_text.replace('  ', ' ')
            message.edit_text(message_text)
        except Exception as e:
            print(e)
            return
Esempio n. 8
0
def qr(c: Client, msg: Message):
    if msg.reply_to_message:
        text = msg.reply_to_message.text or msg.reply_to_message.caption
        if not text:
            msg.edit_text("Not a valid message!")
    elif len(msg.command) > 1:
        text = msg.text[len("/qr"):]
    else:
        msg.edit_text(
            "Please reply to a message or specify the text like <code>/qr GodSaveTheDoge</code>"
        )
        return 1
    msg.delete()
    c.send_photo(
        msg.chat.id,
        "https://chart.googleapis.com/chart?chs=500x500&cht=qr&chl={}".format(
            urllib.parse.quote(text)),
    )
Esempio n. 9
0
def download(c: Client, msg: Message):
    starttime = time.time()

    fname = "Downloads/" + getname(c, msg)

    try:
        msg.reply_to_message.download(file_name=fname,
                                      progress=download_update,
                                      progress_args=(msg, fname))
    except Exception as e:
        msg.edit_text("Something went wrong:\n" + str(e))

    msg.edit_text("{} <b>Downloaded</b>\n"
                  "{} <b>Saved to:</b> <code>{}</code>\n"
                  "{} <b>Time needed:</b> {:.1f}\n".format(
                      emoji.DOWN_ARROW, emoji.FILE_FOLDER, fname,
                      emoji.HOURGLASS_DONE,
                      time.time() - starttime))
Esempio n. 10
0
def invert(c: Client, msg: Message):
    targetmsg: Message = msg.reply_to_message

    if not (targetmsg.photo or targetmsg.sticker):
        msg.edit_text("Please reply to a photo or a sticker!")
        return 1

    msg.delete()

    image: PIL.Image.Image = get_image(targetmsg)

    image = PIL.ImageOps.invert(image)

    c.send_photo(
        msg.chat.id,
        save_image(image),
        caption="<b>Inverted</b>",
        reply_to_message_id=targetmsg.message_id,
    )
Esempio n. 11
0
def msg2sticker(c: Client, msg: Message):
    targetmsg = msg.reply_to_message

    if not targetmsg.chat.username:
        msg.edit_text("Not supported in private chats!")
        return 1

    msg.edit_text("Initializing driver...")

    try:
        driver: Firefox = driverWrapper(options=OPTIONS)
    except Exception as e:
        logging.error(f"An exception occurred -> {type(e).__name__}: {e}")
        msg.edit_text("Something went wrong!")
        return 1

    msg.edit_text("Reaching https://telegram.me/...", disable_web_page_preview=True)

    driver.get(
        "https://t.me/{}/{}?embed=1".format(
            targetmsg.chat.username, targetmsg.message_id
        )
    )

    element = driver.find_element_by_css_selector(CSS_SELECTOR)

    if not element:
        msg.edit_text("Something went wrong!")
        return 1

    image: PIL.Image.Image = PIL.Image.open(io.BytesIO(element.screenshot_as_png))

    path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".webp"
    image.save(path, "webp")

    driver.quit()
    msg.edit_text("Sending sticker...")

    c.send_sticker(msg.chat.id, path, reply_to_message_id=targetmsg.message_id)

    if SEND_PHOTO:
        path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".png"

        image.save(path, "png")

        c.send_photo(msg.chat.id, path, reply_to_message_id=targetmsg.message_id)

    msg.delete()
Esempio n. 12
0
def telegraph(c: Client, msg: Message):
    if len(msg.command) > 1:
        targetmsg = msg
        text = (targetmsg.text[len("/telegraph"):]
                or targetmsg.caption[len("/telegraph"):])
        author = targetmsg.from_user.first_name
        title = msg.chat.username or msg.chat.title or msg.chat.first_name
    elif msg.reply_to_message:
        targetmsg = msg.reply_to_message
        text = targetmsg.text
        author = targetmsg.from_user.first_name
        title = msg.chat.username or msg.chat.title or msg.chat.first_name
    else:
        msg.edit_text(
            "Please reply to a message or specify the text with <code>/telegraph Some Text Here</code>"
        )
        return 1

    if not text:
        msg.edit_text(
            f"{emoji.NEWSPAPER} Telegraph\n"
            f"\n"
            f"{emoji.CROSS_MARK} <b>Error:</b> <code>Invalid message</code>")

    nodes = utils.html_to_nodes(text.replace("'", "\\u0027"))

    if len(nodes) == 0:
        msg.edit_text(
            f"{emoji.NEWSPAPER} Telegraph\n"
            f"\n"
            f"{emoji.CROSS_MARK} <b>Error:</b> <code>Invalid text!</code>")

    content = ("[" + "".join([
        '{{"tag": "p", "children": [{}]}},'.format(
            i if isinstance(i, str) else f'"{i}"') for i in nodes[:-1]
    ]) + '{{"tag": "p", "children": [{}]}}'.format(
        nodes[-1] if isinstance(nodes[-1], str) != str else f'"{nodes[-1]}"') +
               "]")

    files = {
        "Data": (
            "content.html",
            io.BytesIO(content.replace("'", '"').encode()),
            "plain/text",
        )
    }
    data = {
        "title": title,
        "author": author,
        "author_url": "https://github.com/GodSaveTheDoge",
        "save_hash": "",
        "page_id": "0",
    }

    r = requests.post("https://edit.telegra.ph/save",
                      files=files,
                      data=data,
                      headers=HEADERS).json()

    if "error" in r.keys():
        msg.edit_text(
            f"{emoji.NEWSPAPER} Telegraph\n"
            f"\n"
            f"{emoji.CROSS_MARK} <b>Error:</b> <code>{r['error']}</code>")
        return 1

    msg.edit_text(
        f"{emoji.NEWSPAPER} Telegraph\n"
        f"\n"
        f"{emoji.PAGE_WITH_CURL} <b>Title:</b> <code>{title}</code>\n"
        f"{emoji.LINK} <b>Link:</b> https://telegra.ph/{r['path']}\n"
        f"{emoji.PEN} <b>Author:</b> <code>{author}</code>",
        parse_mode="html",
    )
Esempio n. 13
0
def translate_cmd(client: Client, message: Message):
    def translate_text(text_to_translate: str,
                       dest_lang: str = environ.get('LANGUAGE'),
                       src_lang: str = 'DETECT'):
        translator = Translator()
        result: str = ''
        for i in range(20):
            try:
                if src_lang != 'DETECT':
                    result = translator.translate(text_to_translate,
                                                  src=src_lang,
                                                  dest=dest_lang).text
                else:
                    result = translator.translate(text_to_translate,
                                                  dest=dest_lang).text
                break
            except Exception:
                translator = Translator()
        return result

    words: List[str] = message.text.split(' ')
    if len(words) == 1:
        text = translate_text(message.reply_to_message.text)
        message.edit_text(text if text != '' else "1Couldn't translate...")
        return
    if ':' in words[1]:
        try:
            langs: List[str] = words[1].split(':')
            src: str = languages.lookup(langs[0]).name
            dest: str = languages.lookup(langs[1]).name
            text = ' '.join(
                words[2:]) if len(words) > 2 else message.reply_to_message.text
            text = translate_text(text, dest, src)
            message.edit_text(text if text != '' else "2Couldn't translate...")
        except LookupError:
            message.edit_text("Couldn't find language...")
        except Exception:
            message.edit_text("3Couldn't translate...")
        return
    try:
        text = ' '.join(
            words[2:]) if len(words) > 2 else message.reply_to_message.text
        text = translate_text(text, languages.lookup(words[1]).name)
        message.edit_text(text if text != '' else "4Couldn't translate...")
    except LookupError:
        text = translate_text(message.text)
        message.edit_text(text if text != '' else "5Couldn't translate...")
Esempio n. 14
0
def carbon(c: Client, msg: Message):
    code = ArgumentOrReply(msg, len("/carbon "))
    if not code:
        msg.edit_text("Please reply to a message or use <code>/carbon My Text</code>")

    _params = {
        "bg": "rgba(57, 70, 79, 1)",
        "t": "seti",
        "wt": "none",
        "l": "auto",
        "ds": "true",
        "dsyoff": "20px",
        "dsblur": "68px",
        "wc": "true",
        "wa": "true",
        "pv": "56px",
        "ph": "56px",
        "ln": "false",
        "fl": "1",
        "fm": "Hack",
        "fs": "14px",
        "lh": "133%",
        "si": "false",
        "es": "2x",
        "wm": "false",
        "code": code,
    }

    params = "&".join(
        ["{}={}".format(i, urllib.parse.quote(j)) for i, j in _params.items()]
    )

    msg.edit_text("Initializing driver...")

    try:
        driver: Firefox = driverWrapper(options=OPTIONS)
    except Exception as e:
        logging.error(f"An exception occurred -> {type(e).__name__}: {e}")
        msg.edit_text("Something went wrong!")
        return 1

    msg.edit_text("Reaching https://carbon.now.sh/...", disable_web_page_preview=True)

    driver.get("https://carbon.now.sh/?" + params)

    element = driver.find_element_by_css_selector(CSS_SELECTOR)

    if not element:
        msg.edit_text("Something went wrong!")
        return 1

    if not os.path.exists("tmp"):
        os.mkdir("tmp")

    path = "tmp/" + "".join(random.choices(string.ascii_letters, k=40)) + ".png"
    open(path, "wb").write(element.screenshot_as_png)

    driver.quit()
    msg.edit_text("Sending photo...")

    if msg.reply_to_message:
        c.send_photo(
            msg.chat.id, path, reply_to_message_id=msg.reply_to_message.message_id
        )
    else:
        c.send_photo(msg.chat.id, path)

    msg.delete()
Esempio n. 15
0
def editMessage(text: str, message: Message):
    try:
        message.edit_text(text)
    except Exception as e:
        LOGGER.error(str(e))