Пример #1
0
async def on_done_m(c: AndroidRepo, m: Message):
    query = m.text.split()
    command = query[0]
    reply = m.reply_to_message
    request = await get_request_by_user_id(message_id=reply.id)
    if len(request) > 0:
        request = request[0]
        user_id = request.user
        request_id = request.request_id
        staff_msg = (
            f"<code>{m.text[len(command)+1:]}</code>" if len(query) > 1 else "None"
        )
        doc = KanTeXDocument(
            Section(
                "Request done",
                KeyValueItem(Bold("ID"), Code(request_id)),
                KeyValueItem(Bold("Staff message"), Code(staff_msg)),
                KeyValueItem(Bold("Request"), Code(request.request)),
            ),
            Section(
                "Note",
                Italic("Don't be surprised, it will disappear from your request list."),
            ),
        )
        try:
            await c.send_message(chat_id=user_id, text=doc)
        except UserIsBlocked:
            pass
        await request.delete()
        await m.reply_text("The request was successfully done.")
Пример #2
0
async def on_myrequests_m(c: AndroidRepo, m: Message):
    user = m.from_user
    requests = await get_request_by_user_id(user_id=user.id)

    if requests:
        doc = KanTeXDocument(
            KeyValueItem(Bold("Ignored"), Code(bool(requests[0]["ignore"]))),
        )
        sec = Section("Requests")
        for request in requests:
            sec.append(
                KeyValueItem(Bold(request["request_id"]), Code(request["request"]))
            )
        doc.append(sec)
        doc.append(
            Item("Use <code>/cancelrequest &lt;id&gt;</code> to cancel a request.")
        )
        return await m.reply_text(doc)
    return await m.reply_text("You haven't sent any request yet.")
Пример #3
0
async def bot_info(c: Korone, m: Message):
    doc = Section(
        "PyKorone Bot",
        KeyValueItem(Bold("Source"), korone.__source__),
        KeyValueItem(Bold("Korone"),
                     f"{korone.__version__} ({c.version_code})"),
        KeyValueItem(Bold("Pyrogram"), pyrogram.__version__),
        KeyValueItem(Bold("Python"), platform.python_version()),
    )
    await m.reply_text(doc, disable_web_page_preview=True)
Пример #4
0
async def on_info_u(c: Client, m: Message, user: User):
    doc = KanTeXDocument(
        Section(
            user.first_name,
            SubSection('General', KeyValueItem('id', Code(user.id)),
                       KeyValueItem('first_name', Code(user.first_name)),
                       KeyValueItem('last_name', Code(user.last_name)),
                       KeyValueItem('username', Code(user.username)))))
    # TODO: add mention
    await m.reply_text(doc)
Пример #5
0
async def on_deleted_m(c: AndroidRepo, messages: List[Message]):
    for m in messages:
        request = await get_request_by_message_id(message_id=m.id)
        if request:
            user_id = request[0]["user"]
            request_id = request[0]["request_id"]
            doc = KanTeXDocument(
                Section(
                    "Request canceled",
                    KeyValueItem(Bold("ID"), Code(request_id)),
                    KeyValueItem(Bold("Request"), Code(request[0]["request"])),
                )
            )
            await c.send_message(chat_id=user_id, text=doc)
            await delete_request(user_id=user_id, request_id=request_id)
Пример #6
0
async def on_reply_m(c: AndroidRepo, m: Message):
    answer = m.matches[0]["answer"]
    reply = m.reply_to_message
    request = await get_request_by_message_id(message_id=reply.id)
    if request:
        user_id = request[0]["user"]
        request_id = request[0]["request_id"]
        doc = KanTeXDocument(
            Section(
                "Answer to your request",
                KeyValueItem(Bold("ID"), Code(request_id)),
                KeyValueItem(Bold("Answer"), Code(answer)),
            )
        )
        try:
            await c.send_message(chat_id=user_id, text=doc)
        except UserIsBlocked:
            await m.reply_text("The user has blocked the bot!")
            return
    else:
        m.continue_propagation()
Пример #7
0
async def on_info_m(c: AndroidRepo, m: Message):
    magisk_modules = await get_all_modules()
    source_url = "git.io/JtVsY"
    doc = KanTeXDocument(
        Section(
            "AndroidRepo Bot",
            SubSection(
                "General",
                KeyValueItem(Bold("Bot"), androidrepo.__version__),
                KeyValueItem(Bold("KanTeX"), kantex.__version__),
                KeyValueItem(Bold("Python"), platform.python_version()),
                KeyValueItem(Bold("Pyrogram"), pyrogram.__version__),
                KeyValueItem(Bold("Source"), source_url),
                KeyValueItem(Bold("System"), c.system_version),
            ),
            SubSection(
                "Magisk", KeyValueItem(Bold("Modules"), Code(len(magisk_modules)))
            ),
        )
    )
    await m.reply_text(doc, disable_web_page_preview=True)
Пример #8
0
async def system_info(c: Korone, m: Message):
    uname = platform.uname()

    # RAM usage
    vm = psutil.virtual_memory()
    vm_used = humanize.naturalsize(vm.used, binary=True)
    vm_total = humanize.naturalsize(vm.total, binary=True)

    # Swap usage
    sm = psutil.swap_memory()
    sm_used = humanize.naturalsize(sm.used, binary=True)
    sm_total = humanize.naturalsize(sm.total, binary=True)

    # CPU
    cpu_freq = psutil.cpu_freq().current
    if cpu_freq >= 1000:
        cpu_freq = f"{round(cpu_freq / 1000, 2)}GHz"
    else:
        cpu_freq = f"{round(cpu_freq, 2)}MHz"
    cpu_usage = (f"{psutil.cpu_percent(interval=1)}% "
                 f"({psutil.cpu_count()}) "
                 f"{cpu_freq}")

    # Uptime
    time_now = datetime.now().replace(tzinfo=timezone.utc)
    uptime = time_now - c.start_time

    doc = Section(
        "PyKorone System",
        KeyValueItem(Bold("OS"), Code(uname.system)),
        KeyValueItem(Bold("Node"), Code(uname.node)),
        KeyValueItem(Bold("Kernel"), Code(uname.release)),
        KeyValueItem(Bold("Arch"), Code(uname.machine)),
        KeyValueItem(Bold("CPU"), Code(cpu_usage)),
        KeyValueItem(Bold("RAM"), Code(f"{vm_used}/{vm_total}")),
        KeyValueItem(Bold("Swap"), Code(f"{sm_used}/{sm_total}")),
        KeyValueItem(Bold("Uptime"), Code(humanize.precisedelta(uptime))),
    )

    await m.reply_text(doc, disable_web_page_preview=True)
Пример #9
0
async def on_request_m(c: AndroidRepo, m: Message):
    if m.chat.type in (enums.ChatType.GROUP, enums.ChatType.SUPERGROUP):
        keyboard = [
            [
                (
                    "Go to PM!",
                    f"http://t.me/{c.me.username}?start",
                    "url",
                )
            ]
        ]
        sent = await m.reply_text(
            "Please use this command in private.",
            reply_markup=c.ikb(keyboard),
        )
        await asyncio.sleep(5)
        with suppress(BadRequest):
            await sent.delete()
            await m.delete()
        return
    user = m.from_user
    requests = await get_request_by_user_id(user_id=user.id)
    last_request = None

    last_request_time = 0
    if requests:
        last_request = requests[-1]
        last_request_time = last_request["time"]

    now_time = time.time()

    if user.id not in SUDO_USERS:
        now = datetime.datetime.fromtimestamp(now_time)
        if last_request_time > 0:
            last = datetime.datetime.fromtimestamp(last_request_time)
            if last_request["attempts"] > 3:
                if bool(last_request["ignore"]):
                    return
                await update_request(Ignore=1)
                await c.send_log_message(
                    STAFF_ID,
                    f"{user.mention} was spamming requests and has been ignored.",
                )
                return await m.reply_text(
                    "You have spammed too many requests, so you will be ignored."
                )
            if (now - last).seconds < (3 * 60):
                last_request.update_from_dict({"attempts": (last_request.attempts) + 1})
                await last_request.save()
                await c.send_log_message(
                    STAFF_ID, f"{user.mention} is spamming requests."
                )
                return await m.reply_text(
                    "You cannot send multiple requests one after the other, wait 3 minutes."
                )

    if requests is not None and len(requests) > 15:
        return await m.reply_text("You have reached the requests limit.")

    request = m.text[len(m.text.split()[0]) + 1 :]
    doc = KanTeXDocument(
        Section(
            "New request",
            KeyValueItem(Bold("From"), (user.mention)),
            KeyValueItem(Bold("Request"), Code(request)),
        )
    )
    sent = await c.send_log_message(STAFF_ID, doc)
    if sent:
        await create_request(
            user_id=user.id,
            time=now_time,
            ignore=0,
            request=request,
            attempts=0,
            request_id=(last_request["request_id"] if last_request else 0) + 1,
            message_id=sent.id,
        )
        await m.reply_text("Your request was successfully sent!")
    else:
        await m.reply_text("There was a problem submitting your request.")
Пример #10
0
async def inline_sw(c: Korone, q: InlineQuery):
    query = q.query.split()
    if len(query) != 0 and query[0] == "sw":
        args = " ".join(query[1:])
        try:
            user = await c.get_users(args) if args else q.from_user
        except BadRequest as e:
            await q.answer(
                [
                    InlineQueryResultArticle(
                        title="Erro!",
                        description="Clique aqui para ver o erro.",
                        input_message_content=InputTextMessageContent(
                            f"<b>Erro:</b> <code>{e}</code>"),
                    )
                ],
                cache_time=0,
            )

            return
        r = await http.get(
            f"https://api.spamwat.ch/banlist/{int(user.id)}",
            headers={"Authorization": f"Bearer {SW_API}"},
        )
        spamwatch = Section(
            f"{user.mention(html.escape(user.first_name), style='html')}", )
        sw_ban = r.json()
        if r.status_code == 200:
            ban_message = sw_ban["message"]
            if ban_message:
                ban_message = (
                    f'{ban_message[:128]}{"[...]" if len(ban_message) > 128 else ""}'
                )
            spamwatch.extend([
                SubSection(
                    "SpamWatch",
                    KeyValueItem(Bold("reason"), Code(sw_ban["reason"])),
                    KeyValueItem(
                        Bold("date"),
                        Code(datetime.fromtimestamp(sw_ban["date"])),
                    ),
                    KeyValueItem(Bold("timestamp"), Code(sw_ban["date"])),
                    KeyValueItem(Bold("admin"), Code(sw_ban["admin"])),
                    KeyValueItem(Bold("message"), Code(ban_message)),
                ),
            ])
            await q.answer(
                [
                    InlineQueryResultArticle(
                        title=
                        f"Sobre {html.escape(user.first_name)} - SpamWatch",
                        description=
                        "Veja se o usuário está banido no SpamWatch.",
                        input_message_content=InputTextMessageContent(
                            spamwatch),
                    )
                ],
                cache_time=0,
            )

        elif r.status_code == 404:
            spamwatch.extend([
                SubSection(
                    "SpamWatch",
                    KeyValueItem(Bold("banned"), Code("False")),
                ),
            ])
            await q.answer(
                [
                    InlineQueryResultArticle(
                        title=
                        f"Sobre {html.escape(user.first_name)} - SpamWatch",
                        description=
                        "Veja se o usuário está banido no SpamWatch.",
                        input_message_content=InputTextMessageContent(
                            spamwatch),
                    )
                ],
                cache_time=0,
            )