Example #1
0
def is_gif(file):
    # ngl this should be fixed, telethon.utils.is_gif but working
    # lazy to go to github and make an issue kek
    if not is_video(file):
        return False
    return DocumentAttributeAnimated() in getattr(file, "document",
                                                  file).attributes
Example #2
0
class File:
    is_video: Filter = Filter(lambda event: is_video(event.media))
    is_image: Filter = Filter(lambda event: is_image(event.media))
    is_gif: Filter = Filter(lambda event: is_gif(event.document))
    is_audio: Filter = Filter(lambda event: is_audio(event.media))

    # generated by extensions
    # Image extensions
    png: Filter = _FilterVar()
    jpeg: Filter = _FilterVar()
    webp: Filter = _FilterVar()
    gif: Filter = _FilterVar()
    bmp: Filter = _FilterVar()
    tga: Filter = _FilterVar()
    tiff: Filter = _FilterVar()
    psd: Filter = _FilterVar()

    # Video extensions
    mp4: Filter = _FilterVar()
    mov: Filter = _FilterVar()
    avi: Filter = _FilterVar()

    # Audio extensions
    mp2: Filter = _FilterVar()  # a.k.a. ISO/IEC 13818-2
    mp3: Filter = _FilterVar()
    m4a: Filter = _FilterVar()
    aac: Filter = _FilterVar()
    ogg: Filter = _FilterVar()
    flac: Filter = _FilterVar()

    # Win executable extension
    exe: Filter = _FilterVar()
Example #3
0
async def areverse(e):
    media = e.media
    if not media:
        r = await e.get_reply_message()
        media = getattr(r, 'media', None)
    if not media:
        await e.edit('err \\\nMedia required')
        return
    ig = is_gif(media) or is_video(media)
    if not is_image(media) and not ig:
        await e.edit('err \\\nMedia must be an image or gif or video')
        return
    filename = 'file.jpg'
    if not ig and isinstance(media, MessageMediaDocument):
        attribs = media.document.attributes
        for i in attribs:
            if isinstance(i, DocumentAttributeFilename):
                filename = i.file_name
                break
    await e.edit('`Downloading image...`')
    content = await e.client.download_media(media, bytes, thumb=-1 if ig else None)
    await e.edit('`Searching for result...`')
    file = memory_file(filename, content)
    async with aiohttp.ClientSession() as session:
        url = 'https://trace.moe/api/search'
        async with session.post(url, data={'image': file}) as raw_resp0:
            resp0 = await raw_resp0.text()
        js0 = json.loads(resp0)['docs']
        if not js0:
            await e.edit('err \\\nNo results found')
            return
        js0 = js0[0]
        text = f'<b>{html.escape(js0["title_romaji"])}'
        if js0['title_native']:
            text += f' ({html.escape(js0["title_native"])})'
        text += '</b>\n'
        if js0['episode']:
            text += f'<b>Episode:</b> {html.escape(str(js0["episode"]))}\n'
        percent = round(js0['similarity'] * 100, 2)
        text += f'<b>Similarity:</b> {percent}%\n'
        dt = pendulum.from_timestamp(js0['at'])
        text += f'<b>At:</b> {html.escape(dt.to_time_string())}'
        await e.edit(text, parse_mode='html')
        dt0 = pendulum.from_timestamp(js0['from'])
        dt1 = pendulum.from_timestamp(js0['to'])
        ctext = f'{html.escape(dt0.to_time_string())} - {html.escape(dt1.to_time_string())}'
        url = ('https://trace.moe/preview.php'
               f'?anilist_id={urlencode(str(js0["anilist_id"]))}'
               f'&file={urlencode(js0["filename"])}'
               f'&t={urlencode(str(js0["at"]))}'
               f'&token={urlencode(js0["tokenthumb"])}')
        async with session.get(url) as raw_resp1:
            file = memory_file('preview.mp4', await raw_resp1.read())
        try:
            await e.reply(ctext, file=file, parse_mode='html')
        except FilePartsInvalidError:
            await e.reply('`Cannot send preview :/`')
Example #4
0
async def whatanime(e):
    media = e.media
    if not media:
        r = await e.get_reply_message()
        media = getattr(r, "media", None)
    if not media:
        await edit_delete(e, "`Media required`")
        return
    ig = is_gif(media) or is_video(media)
    if not is_image(media) and not ig:
        await edit_delete(e, "`Media must be an image or gif or video`")
        return
    filename = "file.jpg"
    if not ig and isinstance(media, MessageMediaDocument):
        attribs = media.document.attributes
        for i in attribs:
            if isinstance(i, DocumentAttributeFilename):
                filename = i.file_name
                break
    xx = await edit_or_reply(e, "`Downloading image..`")
    content = await e.client.download_media(media,
                                            bytes,
                                            thumb=-1 if ig else None)
    await xx.edit("`Searching for result..`")
    file = memory_file(filename, content)
    async with aiohttp.ClientSession() as session:
        url = "https://api.trace.moe/search?anilistInfo"
        async with session.post(url, data={"image": file}) as raw_resp0:
            resp0 = await raw_resp0.json()
        js0 = resp0.get("result")
        if not js0:
            await xx.edit("`No results found.`")
            return
        js0 = js0[0]
        text = f'<b>{html.escape(js0["anilist"]["title"]["romaji"])}'
        if js0["anilist"]["title"]["native"]:
            text += f' ({html.escape(js0["anilist"]["title"]["native"])})'
        text += "</b>\n"
        if js0["episode"]:
            text += f'<b>Episode:</b> {html.escape(str(js0["episode"]))}\n'
        percent = round(js0["similarity"] * 100, 2)
        text += f"<b>Similarity:</b> {percent}%\n"
        at = re.findall(r"t=(.+)&", js0["video"])[0]
        dt = pendulum.from_timestamp(float(at))
        text += f"<b>At:</b> {html.escape(dt.to_time_string())}"
        await e.edit(text, parse_mode="html")
        dt0 = pendulum.from_timestamp(js0["from"])
        dt1 = pendulum.from_timestamp(js0["to"])
        ctext = (
            f"{html.escape(dt0.to_time_string())} - {html.escape(dt1.to_time_string())}"
        )
        async with session.get(js0["video"]) as raw_resp1:
            file = memory_file("preview.mp4", await raw_resp1.read())
        try:
            await xx.edit(ctext, file=file, parse_mode="html")
        except FilePartsInvalidError:
            await xx.edit("`Cannot send preview.`")
Example #5
0
class File:
    """
    Namespace for file extension filters.

    Usage:

    >>> from garnet.filters import File
    ...
    >>> @router.message(File.is_video & (File.mp4 | File.mov))
    ... async def handle_video(event): pass
    >>>
    >>> @router.message(File.is_audio)
    ... async def handle_audio(): pass
    """

    is_video: FE = Filter(lambda event: is_video(event.media))
    is_image: FE = Filter(lambda event: is_image(event.media))
    is_gif: FE = Filter(lambda event: is_gif(event.document))
    is_audio: FE = Filter(lambda event: is_audio(event.media))

    # generated by extensions
    # Image extensions
    png: FE = _FilterVar()
    jpeg: FE = _FilterVar()
    webp: FE = _FilterVar()
    gif: FE = _FilterVar()
    bmp: FE = _FilterVar()
    tga: FE = _FilterVar()
    tiff: FE = _FilterVar()
    psd: FE = _FilterVar()

    # Video extensions
    mp4: FE = _FilterVar()
    mov: FE = _FilterVar()
    avi: FE = _FilterVar()

    # Audio extensions
    mp2: FE = _FilterVar()  # a.k.a. ISO/IEC 13818-2
    mp3: FE = _FilterVar()
    m4a: FE = _FilterVar()
    aac: FE = _FilterVar()
    ogg: FE = _FilterVar()
    flac: FE = _FilterVar()

    # Win executable extension
    exe: FE = _FilterVar()
Example #6
0
async def whatnime(e):
    media = e.media
    if not media:
        r = await e.get_reply_message()
        media = getattr(r, "media", None)
    if not media:
        await e.edit("`Media required`")
        return
    ig = is_gif(media) or is_video(media)
    if not is_image(media) and not ig:
        await e.edit("`Media must be an image or gif or video`")
        return
    filename = "file.jpg"
    if not ig and isinstance(media, MessageMediaDocument):
        attribs = media.document.attributes
        for i in attribs:
            if isinstance(i, DocumentAttributeFilename):
                filename = i.file_name
                break
    await e.edit("`Mencari Judul Anime...`")
    content = await e.client.download_media(media,
                                            bytes,
                                            thumb=-1 if ig else None)
    await e.edit("`Mencari Hasil..`")
    file = memory_file(filename, content)
    async with aiohttp.ClientSession() as session:
        url = "https://trace.moe/api/search"
        async with session.post(url, data={"image": file}) as raw_resp0:
            resp0 = await raw_resp0.text()
        js0 = json.loads(resp0)["docs"]
        if not js0:
            await e.edit("`No results found.`")
            return
        js0 = js0[0]
        text = f'<b>{html.escape(js0["title_romaji"])}'
        if js0["title_native"]:
            text += f' ({html.escape(js0["title_native"])})'
        text += "</b>\n"
        if js0["episode"]:
            text += f'<b>Episode:</b> {html.escape(str(js0["episode"]))}\n'
        percent = round(js0["similarity"] * 100, 2)
        text += f"<b>Similarity:</b> {percent}%\n"
        dt = pendulum.from_timestamp(js0["at"])
        text += f"<b>At:</b> {html.escape(dt.to_time_string())}"
        await e.edit(text, parse_mode="html")
        dt0 = pendulum.from_timestamp(js0["from"])
        dt1 = pendulum.from_timestamp(js0["to"])
        ctext = (
            f"{html.escape(dt0.to_time_string())} - {html.escape(dt1.to_time_string())}"
        )
        url = ("https://trace.moe/preview.php"
               f'?anilist_id={urlencode(str(js0["anilist_id"]))}'
               f'&file={urlencode(js0["filename"])}'
               f'&t={urlencode(str(js0["at"]))}'
               f'&token={urlencode(js0["tokenthumb"])}')
        async with session.get(url) as raw_resp1:
            file = memory_file("preview.mp4", await raw_resp1.read())
        try:
            await e.reply(ctext, file=file, parse_mode="html")
        except FilePartsInvalidError:
            await e.reply("`Cannot send preview.`")
Example #7
0
async def whatanime(e):
    media = e.media
    if not media:
        r = await e.get_reply_message()
        media = getattr(r, "media", None)
    if not media:
        await e.edit("`Mídia necessária`")
        return
    ig = is_gif(media) or is_video(media)
    if not is_image(media) and not ig:
        await e.edit("`A mídia deve ser uma imagem ou gif ou vídeo`")
        return
    filename = "file.jpg"
    if not ig and isinstance(media, MessageMediaDocument):
        attribs = media.document.attributes
        for i in attribs:
            if isinstance(i, DocumentAttributeFilename):
                filename = i.file_name
                break
    await e.edit("`Baixando imagem..`")
    content = await e.client.download_media(media,
                                            bytes,
                                            thumb=-1 if ig else None)
    await e.edit("`Procurando resultados..`")
    file = memory_file(filename, content)
    async with aiohttp.ClientSession() as session:
        url = "https://trace.moe/api/search"
        async with session.post(url, data={"image": file}) as raw_resp0:
            resp0 = await raw_resp0.text()
        js0 = json.loads(resp0)["docs"]
        if not js0:
            await e.edit("`Nenhum resultado encontrado.`")
            return
        js0 = js0[0]
        text = f'<b>{html.escape(js0["title_romaji"])}'
        if js0["title_native"]:
            text += f' ({html.escape(js0["title_native"])})'
        text += "</b>\n"
        if js0["episode"]:
            text += f'<b>Episódio:</b> {html.escape(str(js0["episode"]))}\n'
        percent = round(js0["similarity"] * 100, 2)
        text += f"<b>Semelhança:</b> {percent}%\n"
        dt = pendulum.from_timestamp(js0["at"])
        text += f"<b>Em:</b> {html.escape(dt.to_time_string())}"
        await e.edit(text, parse_mode="html")
        dt0 = pendulum.from_timestamp(js0["from"])
        dt1 = pendulum.from_timestamp(js0["to"])
        ctext = (
            f"{html.escape(dt0.to_time_string())} - {html.escape(dt1.to_time_string())}"
        )
        url = ("https://media.trace.moe/video/"
               f'{urlencode(str(js0["anilist_id"]))}' + "/"
               f'{urlencode(js0["filename"])}'
               f'?t={urlencode(str(js0["at"]))}'
               f'&token={urlencode(js0["tokenthumb"])}')
        async with session.get(url) as raw_resp1:
            file = memory_file("preview.mp4", await raw_resp1.read())
        try:
            await e.reply(ctext, file=file, parse_mode="html")
        except FilePartsInvalidError:
            await e.reply("`Não foi possível enviar visualização.`")
Example #8
0
async def whatanime(e):
    media = e.media
    if not media:
        r = await e.get_reply_message()
        media = getattr(r, "media", None)
    if not media:
        await e.edit("`Dibutuhkan media`")
        return
    ig = is_gif(media) or is_video(media)
    if not is_image(media) and not ig:
        await e.edit("`Media harus berupa gambar, gif atau video`")
        return
    filename = "file.jpg"
    if not ig and isinstance(media, MessageMediaDocument):
        attribs = media.document.attributes
        for i in attribs:
            if isinstance(i, DocumentAttributeFilename):
                filename = i.file_name
                break
    await e.edit("`Mengunduh gambar...`")
    content = await e.client.download_media(media,
                                            bytes,
                                            thumb=-1 if ig else None)
    await e.edit("`Mencari hasil...`")
    file = memory_file(filename, content)
    async with aiohttp.ClientSession() as session:
        url = "https://trace.moe/api/search"
        async with session.post(url, data={"image": file}) as raw_resp0:
            resp0 = await raw_resp0.text()
        js0 = json.loads(resp0)["docs"]
        if not js0:
            await e.edit("`Tidak ada hasil yang ditemukan.`")
            return
        js0 = js0[0]
        text = f'<b>{html.escape(js0["title_romaji"])}'
        if js0["title_native"]:
            text += f' ({html.escape(js0["title_native"])})'
        text += "</b>\n"
        if js0["episode"]:
            text += f'<b>Episode :</b> {html.escape(str(js0["episode"]))}\n'
        percent = round(js0["similarity"] * 100, 2)
        text += f"<b>Kesamaan :</b> {percent}%\n"
        dt = pendulum.from_timestamp(js0["at"])
        text += f"<b>Di :</b> {html.escape(dt.to_time_string())}"
        await e.edit(text, parse_mode="html")
        dt0 = pendulum.from_timestamp(js0["from"])
        dt1 = pendulum.from_timestamp(js0["to"])
        ctext = (
            f"{html.escape(dt0.to_time_string())} - {html.escape(dt1.to_time_string())}"
        )
        url = ("https://media.trace.moe/video/"
               f'{urlencode(str(js0["anilist_id"]))}' + "/"
               f'{urlencode(js0["filename"])}'
               f'?t={urlencode(str(js0["at"]))}'
               f'&token={urlencode(js0["tokenthumb"])}')
        async with session.get(url) as raw_resp1:
            file = memory_file("preview.mp4", await raw_resp1.read())
        try:
            await e.reply(ctext, file=file, parse_mode="html")
        except FilePartsInvalidError:
            await e.reply("`Tidak dapat mengirim pratinjau.`")