File size: 3,870 Bytes
1b5719b
eef97a7
b978403
 
1b5719b
 
eef97a7
d7039ef
1b5719b
4056428
 
3c05ff4
eef97a7
 
3c05ff4
 
1b5719b
7956eb0
 
 
 
 
 
 
 
b002286
7956eb0
 
 
 
 
b002286
7956eb0
 
adae6fc
7956eb0
d7fcc6b
2b55ef3
7956eb0
 
 
 
 
 
 
d7039ef
 
058dd88
 
d7039ef
d7e1221
058dd88
d7039ef
 
7956eb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c05ff4
3580517
7956eb0
3c05ff4
058dd88
4056428
3c05ff4
7956eb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b978403
7956eb0
 
b978403
3c9449b
7956eb0
b978403
7956eb0
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from platform import python_version
from threading import RLock
from time import gmtime, strftime
from time import time as t

from pyrogram import Client, __version__
from pyrogram.raw.all import layer
from pyrogram.types import BotCommand

from Powers import (API_HASH, API_ID, BOT_TOKEN, LOG_DATETIME,
                    LOGFILE, LOGGER, MESSAGE_DUMP, NO_LOAD, UPTIME,
                    WORKERS, load_cmds, scheduler)
from Powers.database import MongoDB
from Powers.plugins import all_plugins
from Powers.plugins.scheduled_jobs import *
from Powers.supports import *
from Powers.vars import Config

INITIAL_LOCK = RLock()

# Check if MESSAGE_DUMP is correct
if MESSAGE_DUMP == -100 or not str(MESSAGE_DUMP).startswith("-100"):
    raise Exception(
        "Please enter a vaild Supergroup ID, A Supergroup ID starts with -100",
    )


class Gojo(Client):
    """Starts the Pyrogram Client on the Bot Token when we do 'python3 -m Powers'"""

    def __init__(self):
        # name = Powers

        super().__init__(
            "Gojo_Satoru",
            bot_token=BOT_TOKEN,
            plugins=dict(root="Powers.plugins", exclude=NO_LOAD),
            api_id=API_ID,
            api_hash=API_HASH,
            workers=WORKERS,
        )

    async def start(self):
        """Start the bot."""
        await super().start()
        await self.set_bot_commands(
            [
                BotCommand(
                    "start", "To check weather the bot is alive or not"),
                BotCommand("help", "To get help menu"),
                BotCommand("donate", "To buy me a coffee"),
                BotCommand("bug", "To report bugs")
            ]
        )
        meh = await self.get_me()  # Get bot info from pyrogram client
        LOGGER.info("Starting bot...")
        Config.BOT_ID = meh.id
        Config.BOT_NAME = meh.first_name
        Config.BOT_USERNAME = meh.username
        startmsg = await self.send_message(MESSAGE_DUMP, "<i>Starting Bot...</i>")

        # Show in Log that bot has started
        LOGGER.info(
            f"Pyrogram v{__version__} (Layer - {layer}) started on {meh.username}",
        )
        LOGGER.info(f"Python Version: {python_version()}\n")

        # Get cmds and keys
        cmd_list = await load_cmds(await all_plugins())
        await load_support_users()
        await cache_support()
        LOGGER.info(f"Plugins Loaded: {cmd_list}")
        if BDB_URI:
            scheduler.add_job(send_wishish, 'cron', [
                self], hour=0, minute=0, second=0)
            scheduler.start()
        # Send a message to MESSAGE_DUMP telling that the
        # bot has started and has loaded all plugins!
        await startmsg.edit_text(
            (
                f"<b><i>@{meh.username} started on Pyrogram v{__version__} (Layer - {layer})</i></b>\n"
                f"\n<b>Python:</b> <u>{python_version()}</u>\n"
                "\n<b>Loaded Plugins:</b>\n"
                f"<i>{cmd_list}</i>\n"
            ),
        )

        LOGGER.info("Bot Started Successfully!\n")

    async def stop(self):
        """Stop the bot and send a message to MESSAGE_DUMP telling that the bot has stopped."""
        runtime = strftime("%Hh %Mm %Ss", gmtime(t() - UPTIME))
        LOGGER.info("Uploading logs before stopping...!\n")
        # Send Logs to MESSAGE_DUMP and LOG_CHANNEL
        scheduler.remove_all_jobs()
        target = MESSAGE_DUMP or OWNER_ID
        await self.send_document(
            target,
            document=LOGFILE,
            caption=(
                "Bot Stopped!\n\n" f"Uptime: {runtime}\n" f"<code>{LOG_DATETIME}</code>"
            ),
        )
        await super().stop()
        MongoDB.close()
        LOGGER.info(
            f"""Bot Stopped.
            Logs have been uploaded to the MESSAGE_DUMP Group!
            Runtime: {runtime}s\n
        """,
        )