Improved shutdown
This commit is contained in:
parent
03b6bbe039
commit
20666fc0f8
@ -116,6 +116,6 @@
|
||||
"commands_admin": [
|
||||
"import",
|
||||
"export",
|
||||
"reboot"
|
||||
"shutdown"
|
||||
]
|
||||
}
|
29
plugins/callbacks/shutdown.py
Normal file
29
plugins/callbacks/shutdown.py
Normal file
@ -0,0 +1,29 @@
|
||||
from os import getpid, makedirs, path
|
||||
from time import time
|
||||
from modules.app import app
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import CallbackQuery
|
||||
from classes.poster_client import PosterClient
|
||||
from modules.scheduler import scheduler
|
||||
from modules.logger import logWrite
|
||||
from modules.utils import configGet, jsonSave, locale
|
||||
|
||||
|
||||
@app.on_callback_query(filters.regex("shutdown"))
|
||||
async def callback_query_nothing(app: PosterClient, clb: CallbackQuery):
|
||||
if clb.from_user.id in app.admins:
|
||||
pid = getpid()
|
||||
logWrite(f"Shutting down bot with pid {pid}")
|
||||
await clb.answer()
|
||||
await clb.message.reply_text(
|
||||
locale("shutdown", "message", locale=clb.from_user.language_code).format(
|
||||
pid
|
||||
),
|
||||
)
|
||||
scheduler.shutdown()
|
||||
makedirs(configGet("cache", "locations"), exist_ok=True)
|
||||
jsonSave(
|
||||
{"timestamp": time()},
|
||||
path.join(configGet("cache", "locations"), "shutdown_time"),
|
||||
)
|
||||
exit()
|
@ -1,24 +1,45 @@
|
||||
from os import getpid
|
||||
from os import getpid, makedirs, path
|
||||
from time import time
|
||||
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
|
||||
|
||||
from classes.poster_client import PosterClient
|
||||
from pyrogram.types import Message
|
||||
|
||||
from modules.app import app
|
||||
from modules.app import app, users_with_context
|
||||
from modules.logger import logWrite
|
||||
from modules.utils import configGet, killProc, locale
|
||||
from modules.scheduler import scheduler
|
||||
from modules.utils import configGet, jsonSave, locale
|
||||
|
||||
|
||||
@app.on_message(
|
||||
~filters.scheduled & filters.command(["kill", "die", "reboot"], prefixes=["", "/"])
|
||||
)
|
||||
@app.on_message(~filters.scheduled & filters.command(["shutdown"], prefixes=["", "/"]))
|
||||
async def cmd_kill(app: PosterClient, msg: Message):
|
||||
if msg.from_user.id in app.admins:
|
||||
pid = getpid()
|
||||
logWrite(
|
||||
locale("shutdown", "console", locale=configGet("locale")).format(str(pid))
|
||||
)
|
||||
global users_with_context
|
||||
if len(users_with_context) > 0:
|
||||
await msg.reply_text(
|
||||
locale("shutdown", "message", locale=configGet("locale")).format(str(pid))
|
||||
f"There're {len(users_with_context)} unfinished users' contexts. If you turn off the bot, those will be lost. Please confirm shutdown using a button below.",
|
||||
reply_markup=InlineKeyboardMarkup(
|
||||
[
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Confirm shutdown", callback_data="shutdown"
|
||||
)
|
||||
killProc(pid)
|
||||
]
|
||||
]
|
||||
),
|
||||
)
|
||||
return
|
||||
pid = getpid()
|
||||
logWrite(f"Shutting down bot with pid {pid}")
|
||||
await msg.reply_text(
|
||||
locale("shutdown", "message", locale=msg.from_user.language_code).format(
|
||||
pid
|
||||
),
|
||||
)
|
||||
scheduler.shutdown()
|
||||
makedirs(configGet("cache", "locations"), exist_ok=True)
|
||||
jsonSave(
|
||||
{"timestamp": time()},
|
||||
path.join(configGet("cache", "locations"), "shutdown_time"),
|
||||
)
|
||||
exit()
|
||||
|
75
poster.py
75
poster.py
@ -1,14 +1,18 @@
|
||||
from os import getpid
|
||||
from os import getpid, path
|
||||
from datetime import datetime
|
||||
from sys import exit
|
||||
from time import time
|
||||
|
||||
from modules.cli import *
|
||||
from modules.logger import logWrite
|
||||
from modules.scheduler import scheduler
|
||||
from modules.utils import configGet, killProc, locale
|
||||
from modules.utils import configGet, jsonLoad, jsonSave, killProc, locale
|
||||
|
||||
# Import ===================================================================================================================================
|
||||
try:
|
||||
from pyrogram.sync import idle
|
||||
from pyrogram.errors import bad_request_400
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from modules.app import app
|
||||
except ModuleNotFoundError:
|
||||
@ -57,6 +61,7 @@ pid = getpid()
|
||||
|
||||
# Imports ==================================================================================================================================
|
||||
from plugins.commands.general import *
|
||||
from plugins.callbacks.shutdown import *
|
||||
|
||||
if configGet("submit", "mode"):
|
||||
from plugins.callbacks.nothing import *
|
||||
@ -112,14 +117,54 @@ if configGet("post", "mode"):
|
||||
# asyncio.run(main())
|
||||
|
||||
if __name__ == "__main__":
|
||||
logWrite(locale("startup", "console", locale=configGet("locale")).format(str(pid)))
|
||||
logWrite(locale("startup", "console").format(str(pid)))
|
||||
|
||||
app.start()
|
||||
|
||||
if configGet("startup", "reports"):
|
||||
try:
|
||||
if path.exists(path.join(configGet("cache", "locations"), "shutdown_time")):
|
||||
downtime = relativedelta(
|
||||
datetime.now(),
|
||||
datetime.fromtimestamp(
|
||||
jsonLoad(
|
||||
path.join(configGet("cache", "locations"), "shutdown_time")
|
||||
)["timestamp"]
|
||||
),
|
||||
)
|
||||
if downtime.days >= 1:
|
||||
app.send_message(
|
||||
app.owner,
|
||||
locale("startup", "message", locale=configGet("locale")).format(str(pid)),
|
||||
configGet("owner"),
|
||||
locale(
|
||||
"startup_downtime_days",
|
||||
"message",
|
||||
).format(pid, downtime.days),
|
||||
)
|
||||
elif downtime.hours >= 1:
|
||||
app.send_message(
|
||||
configGet("owner"),
|
||||
locale(
|
||||
"startup_downtime_hours",
|
||||
"message",
|
||||
).format(pid, downtime.hours),
|
||||
)
|
||||
else:
|
||||
app.send_message(
|
||||
configGet("owner"),
|
||||
locale(
|
||||
"startup_downtime_minutes",
|
||||
"message",
|
||||
locale=configGet("locale"),
|
||||
).format(pid, downtime.minutes),
|
||||
)
|
||||
else:
|
||||
app.send_message(
|
||||
configGet("owner"),
|
||||
locale("startup", "message").format(pid),
|
||||
)
|
||||
except bad_request_400.PeerIdInvalid:
|
||||
logWrite(
|
||||
f"Could not send startup message to bot owner. Perhaps user has not started the bot yet."
|
||||
)
|
||||
|
||||
if configGet("post", "mode"):
|
||||
@ -132,10 +177,24 @@ if __name__ == "__main__":
|
||||
|
||||
idle()
|
||||
|
||||
try:
|
||||
app.send_message(
|
||||
app.owner,
|
||||
locale("shutdown", "message", locale=configGet("locale")).format(str(pid)),
|
||||
configGet("owner"),
|
||||
locale("shutdown", "message").format(pid),
|
||||
)
|
||||
logWrite(locale("shutdown", "console", locale=configGet("locale")).format(str(pid)))
|
||||
except bad_request_400.PeerIdInvalid:
|
||||
logWrite(
|
||||
f"Could not send shutdown message to bot owner. Perhaps user has not started the bot yet."
|
||||
)
|
||||
|
||||
makedirs(configGet("cache", "locations"), exist_ok=True)
|
||||
jsonSave(
|
||||
{"timestamp": time()},
|
||||
path.join(configGet("cache", "locations"), "shutdown_time"),
|
||||
)
|
||||
|
||||
logWrite(locale("shutdown", "console").format(str(pid)))
|
||||
|
||||
scheduler.shutdown()
|
||||
|
||||
killProc(pid)
|
||||
|
Reference in New Issue
Block a user