59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""夜间模式 handler"""
|
|
import asyncio
|
|
import logging
|
|
|
|
from telegram import Update
|
|
from telegram.ext import ContextTypes, CommandHandler, filters
|
|
|
|
import config
|
|
from services.message_utils import record_bot_message
|
|
from services.admin_utils import require_admin
|
|
from services.night_scheduler import enable_night_mode, disable_night_mode
|
|
|
|
logger = logging.getLogger("spam_guard")
|
|
|
|
|
|
async def cmd_night(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|
"""手动控制夜间模式"""
|
|
if not await require_admin(update, context):
|
|
return
|
|
|
|
args = context.args
|
|
if not args:
|
|
reply = await update.message.reply_text(
|
|
"🌙 夜间模式\n\n"
|
|
"用法:\n"
|
|
"/night on 开启\n"
|
|
"/night off 关闭"
|
|
)
|
|
asyncio.create_task(auto_delete(update.message, seconds=60))
|
|
await record_bot_message(reply)
|
|
asyncio.create_task(auto_delete(reply, seconds=60))
|
|
return
|
|
|
|
cmd = args[0].lower()
|
|
if cmd == "on":
|
|
await enable_night_mode(update.effective_chat)
|
|
reply = await update.message.reply_text("🌙 夜间模式已开启,全员禁言")
|
|
elif cmd == "off":
|
|
await disable_night_mode(update.effective_chat)
|
|
reply = await update.message.reply_text("☀️ 夜间模式已关闭,恢复发言")
|
|
else:
|
|
reply = await update.message.reply_text("❓ 用法: /night on|off")
|
|
|
|
asyncio.create_task(auto_delete(update.message, seconds=60))
|
|
await record_bot_message(reply)
|
|
asyncio.create_task(auto_delete(reply, seconds=60))
|
|
|
|
|
|
async def auto_delete(message, seconds=60):
|
|
try:
|
|
await asyncio.sleep(seconds)
|
|
await message.delete()
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def register_night_mode(app):
|
|
app.add_handler(CommandHandler("night", cmd_night, filters.ChatType.GROUPS))
|