# Ultroid - UserBot
# Copyright (C) 2021-2025 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in
# .
"""
✘ Commands Available -
At Night it will turn off everyone permission to send message in an all groups which you added via `{i}addnight`
And Turn On auto at morning
• `{i}addnm`
Add NightMode
To Add Group To Auto Night Mode.
• `{i}remnm`
Remove NightMode
To remove Group From Auto Night Mode
• `{i}listnm`
List NightMode
To Get All List of Groups where NightMode Active.
• `{i}nmtime `
NightMode Time
By Default Its close 00:00 , open 07:00
Use 24hr format
Ex- `nmtime 01 00 06 30`
"""
from . import LOGS
try:
from apscheduler.schedulers.asyncio import AsyncIOScheduler
except ImportError:
LOGS.error("nightmode: 'apscheduler' not Installed!")
AsyncIOScheduler = None
from telethon.tl.functions.messages import EditChatDefaultBannedRightsRequest
from telethon.tl.types import ChatBannedRights
from pyUltroid.dB.base import KeyManager
from . import get_string, udB, ultroid_bot, ultroid_cmd
keym = KeyManager("NIGHT_CHATS", cast=list)
@ultroid_cmd(pattern="nmtime( (.*)|$)")
async def set_time(e):
if not e.pattern_match.group(1).strip():
return await e.eor(get_string("nightm_1"))
try:
ok = e.text.split(maxsplit=1)[1].split()
if len(ok) != 4:
return await e.eor(get_string("nightm_1"))
tm = [int(x) for x in ok]
udB.set_key("NIGHT_TIME", str(tm))
await e.eor(get_string("nightm_2"))
except BaseException:
await e.eor(get_string("nightm_1"))
@ultroid_cmd(pattern="addnm( (.*)|$)")
async def add_grp(e):
if pat := e.pattern_match.group(1).strip():
try:
keym.add((await ultroid_bot.get_entity(pat)).id)
return await e.eor(f"Done, Added {pat} To Night Mode.")
except BaseException:
return await e.eor(get_string("nightm_5"), time=5)
keym.add(e.chat_id)
await e.eor(get_string("nightm_3"))
@ultroid_cmd(pattern="remnm( (.*)|$)")
async def r_em_grp(e):
if pat := e.pattern_match.group(1).strip():
try:
keym.remove((await ultroid_bot.get_entity(pat)).id)
return await e.eor(f"Done, Removed {pat} To Night Mode.")
except BaseException:
return await e.eor(get_string("nightm_5"), time=5)
keym.remove(e.chat_id)
await e.eor(get_string("nightm_4"))
@ultroid_cmd(pattern="listnm$")
async def rem_grp(e):
chats = keym.get()
name = "NightMode Groups Are-:\n\n"
for x in chats:
try:
ok = await ultroid_bot.get_entity(x)
name += f"@{ok.username}" if ok.username else ok.title
except BaseException:
name += str(x)
await e.eor(name)
async def open_grp():
for chat in keym.get():
try:
await ultroid_bot(
EditChatDefaultBannedRightsRequest(
chat,
banned_rights=ChatBannedRights(
until_date=None,
send_messages=False,
send_media=False,
send_stickers=False,
send_gifs=False,
send_games=False,
send_inline=False,
send_polls=False,
),
)
)
await ultroid_bot.send_message(chat, "**NightMode Off**\n\nGroup Opened 🥳.")
except Exception as er:
LOGS.info(er)
async def close_grp():
__, _, h2, m2 = 0, 0, 7, 0
if udB.get_key("NIGHT_TIME"):
_, __, h2, m2 = eval(udB.get_key("NIGHT_TIME"))
for chat in keym.get():
try:
await ultroid_bot(
EditChatDefaultBannedRightsRequest(
chat,
banned_rights=ChatBannedRights(
until_date=None,
send_messages=True,
),
)
)
await ultroid_bot.send_message(
chat, f"**NightMode : Group Closed**\n\nGroup Will Open At `{h2}:{m2}`"
)
except Exception as er:
LOGS.info(er)
if AsyncIOScheduler and keym.get():
try:
h1, m1, h2, m2 = 0, 0, 7, 0
if udB.get_key("NIGHT_TIME"):
h1, m1, h2, m2 = eval(udB.get_key("NIGHT_TIME"))
sch = AsyncIOScheduler()
sch.add_job(close_grp, trigger="cron", hour=h1, minute=m1)
sch.add_job(open_grp, trigger="cron", hour=h2, minute=m2)
sch.start()
except Exception as er:
LOGS.info(er)