""" Service commands for Admin purposes. """
import logging
from datetime import datetime as dt
from ..models import Chat, Quote
from ..database import session
from ..config import bot, ADMIN_ID, types
from .. import reminder
from .. import report
from ..filters import is_admin, is_white
from .get import me, my_ip
@bot.message_handler(commands=["me"])
def command_me(message):
"""Send info about user and chat id [Service]."""
bot.send_message(message.chat.id, me(message))
@bot.message_handler(func=is_admin, commands=["ip"])
def get_ip(message):
bot.send_message(message.chat.id, my_ip())
@bot.message_handler(commands=["remind"])
def remind_manually(message):
"""Remind holidays manually."""
args = message.text.split()
if len(args) > 1:
try:
today = dt.strptime(args[1], "%m-%d-%Y")
except ValueError as ve:
bot.send_message(message.chat.id, f"Не удалось разобрать дату!\n{ve}")
else:
reminder.remind(message.chat.id, today)
else:
bot.send_message(
message.chat.id,
f"Формат даты: MM-DD-YYYY\n\n"
f"Примеры:\n"
f"/remind 09-12-2024\n"
f"/remind 09-13-2022",
)
@bot.message_handler(func=is_admin, commands=["jobs"])
def list_jobs(message):
"""List all the jobs in schedule."""
bot.send_message(ADMIN_ID, reminder.print_get_jobs())
@bot.message_handler(func=is_admin, commands=["stats"])
def send_stats(message: types.Message):
if len(message.text.split()) == 1:
rep = report.create_report_text(message.chat.id)
if rep:
bot.send_message(message.chat.id, rep)
else:
bot.send_message(
message.chat.id, report.create_report_text(message.text.split()[-1])
)
@bot.message_handler(
func=is_admin, commands=["reset_stats"], chat_types=["supergroup", "group"]
)
def send_stats(message: types.Message):
logging.warning("reset_stats")
report.reset_report_stats(message.chat.id)
bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id))
@bot.message_handler(
func=is_white, commands=["enable_stan"], chat_types=["supergroup", "group"]
)
def enable_stan(message: types.Message):
"""Add group to database."""
logging.info(
f"[{message.chat.title}] [{message.from_user.id}] {message.from_user.username}: {message.text}"
)
if not session.query(Chat.id).filter(Chat.chat_id == message.chat.id).first():
logging.info("[TRUE] chat.id == message.chat.id")
session.add(
Chat(
chat_id=message.chat.id,
title=message.chat.title,
antispam=1,
report=0,
reminder=1,
)
)
session.commit()
bot.send_message(
message.chat.id,
f"""Группа "{message.chat.title} добавлена в БД.
/get_group_settings - узнать текущие настройки""",
)
else:
bot.send_message(message.chat.id, "Отказ. Группа уже включена")
@bot.message_handler(
func=is_admin, commands=["disable_stan"], chat_types=["supergroup", "group"]
)
def disable_stan(message: types.Message):
logging.info(
f"[{message.chat.title}] [{message.from_user.id}] {message.from_user.username}: {message.text}"
)
if session.query(Chat.id).filter(Chat.chat_id == message.chat.id).first():
logging.info("[TRUE] chat.id == message.chat.id")
chat = session.query(Chat).filter_by(chat_id=message.chat.id).first()
session.delete(chat)
session.commit()
bot.send_message(message.chat.id, f"""Чат {message.chat.title} удалён""")
else:
bot.send_message(message.chat.id, "Отказ. Этой группы нет в БД.")
@bot.message_handler(
func=is_white,
commands=["set_antispam_report_reminder"],
chat_types=["supergroup", "group"],
)
def set_antispam_report_reminder(message: types.Message):
args = message.text.split()
if len(args) == 4:
try:
antispam = int(args[1])
rep = int(args[2])
rem = int(args[3])
except ValueError:
logging.info(f"[ERROR] Неверные аргументы {message.text}")
else:
session.query(Chat).filter(Chat.chat_id == message.chat.id).update(
{"antispam": antispam, "report": rep, "reminder": rem}
)
bot.send_message(
message.chat.id, f"""Настройки обновлены. Проверить: /get_settings"""
)
@bot.message_handler(
func=is_white, commands=["get_quotes"], chat_types=["supergroup", "group"]
)
def get_quotes(message: types.Message):
logging.info("[TRUE] getting quotes...")
quotes = session.query(Quote.text).filter(Quote.chat_id == message.chat.id).all()
if quotes:
text = "Последние цитаты были\n\n"
text += "\n".join(f"· {quote[0]}" for quote in quotes[-10:])
bot.send_message(message.chat.id, f"{text}")
else:
bot.send_message(
message.chat.id, f"Цитаты отсутствуют. Подробнее: /get_group_info"
)
@bot.message_handler(
func=is_white, commands=["get_group_info"], chat_types=["supergroup", "group"]
)
def get_group_info(message: types.Message):
if session.query(Chat.id).filter(Chat.chat_id == message.chat.id).first():
bot.send_message(
message.chat.id,
f"""Группа: {message.chat.title}
ID: {message.chat.id}
Количество цитат: {len(session.query(Quote).filter(Quote.chat_id == message.chat.id).all())}
Показать последние цитаты: /get_quotes
Текущие настройки:
Антиспам: {session.query(Chat.antispam).filter(Chat.chat_id == message.chat.id).first()[0]}
Ежедневные отчёты: {session.query(Chat.report).filter(Chat.chat_id == message.chat.id).first()[0]}
Праздники: {session.query(Chat.reminder).filter(Chat.chat_id == message.chat.id).first()[0]}""",
)
else:
bot.send_message(message.chat.id, f"Чат не включен.")