January 12

.

import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import datetime
import sqlite3
from apscheduler.schedulers.background import BackgroundScheduler
import datetime

scheduler = BackgroundScheduler()
scheduler.start()






TOKEN = '6969615826:AAE7NWK2XLl0tCPUa0-Kzsc-HgmgGkuZakw'
bot = telebot.TeleBot(TOKEN)

# Описание команд и их ожидаемых аргументов
commands = {
    '/mute': 'Мут нарушителя. Укажите количество часов после команды',
    '/unmute': 'Размут нарушителя',
    '/ban': 'Бан нарушителя',
    '/unban': 'Разбан нарушителя',
    '/w': 'Предупреждение нарушителю',
    '/v': 'Установить количество предупреждений',
    '/l': 'Посмотреть количество предупреждений'
}

timed_mutes = {}  # словарь для хранения временных мутов
timed_bans = {}  # словарь для хранения временных банов
message_history = {}  # словарь для хранения истории сообщений пользователей

MUTE_THRESHOLD = 5  # количество предупреждений, после которых будет отключение на определенное количество часов
DEFAULT_DISABLE_HOURS = 24  # количество часов отключения по умолчанию

@bot.message_handler(commands=['start'])
def start(message):
    chat_id = message.chat.id

    if 'startgroup=new' in message.text:
        bot.send_message(chat_id, "Доброго времени суток, я бот модератор.")
    else:
        bot_username = bot.get_me().username
        invite_link = f"https://t.me/{bot_username}?startgroup=new"

        markup = InlineKeyboardMarkup()
        markup.add(InlineKeyboardButton(text='Добавить бота в группу', url=invite_link))

        bot.send_message(chat_id, "Привет, я модератор бот! Чтобы добавить меня в группу, нажмите на кнопку ниже.", reply_markup=markup)

@bot.message_handler(commands=['help'])
def help_command(message):
    help_text = "Список доступных команд:\n"
    for cmd, description in commands.items():
        help_text += f"{cmd}: {description}\n"
    bot.send_message(message.chat.id, help_text)

@bot.message_handler(commands=['mute'])
def mute_user(message):
    if is_user_admin(message):
        if message.reply_to_message:
            try:
                hours = int(message.text.split()[1])
            except (IndexError, ValueError):
                bot.reply_to(message, "Укажите количество часов после команды /mute.")
                return

            # Получить дату окончания мута
            end_datetime = datetime.datetime.now() + datetime.timedelta(hours=hours)

            # Замутить нарушителя на указанное количество часов
            user_id = message.reply_to_message.from_user.id  # Используйте reply_to_message для мута конкретного пользователя
            timed_mutes[user_id] = end_datetime

            bot.restrict_chat_member(message.chat.id, user_id, until_date=end_datetime, can_send_messages=False)
            bot.reply_to(message, f"Нарушитель замучен на {hours} часов.")
        else:
            bot.reply_to(message, "Ответте на сообщение нарушителя, чтобы его замутить.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['unmute'])
def unmute_user(message):
    if is_user_admin(message):
        if message.reply_to_message:
            user_id = message.reply_to_message.from_user.id  # Используйте reply_to_message для размута конкретного пользователя

            # Если нарушитель имел временный мут, удаляем его из словаря
            if user_id in timed_mutes:
                del timed_mutes[user_id]

            bot.restrict_chat_member(message.chat.id, user_id, can_send_messages=True)
            bot.reply_to(message, "Нарушитель размучен.")
        else:
            bot.reply_to(message, "Ответте на сообщение нарушителя, чтобы его размутить.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['ban'])
def ban_user(message):
    if is_user_admin(message):
        if message.reply_to_message:
            user_id = message.reply_to_message.from_user.id  # Используйте reply_to_message для бана конкретного пользователя
# Забанить нарушителя
            timed_bans[user_id] = True

            bot.kick_chat_member(message.chat.id, user_id)
            bot.reply_to(message, "Нарушитель забанен.")
        else:
            bot.reply_to(message, "Ответте на сообщение нарушителя, чтобы его забанить.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['unban'])
def unban_user(message):
    if is_user_admin(message):
        if message.reply_to_message:
            user_id = message.reply_to_message.from_user.id  # Используйте reply_to_message для разбана конкретного пользователя

            # Если нарушитель имел временный бан, удаляем его из словаря
            if user_id in timed_bans:
                del timed_bans[user_id]

            bot.unban_chat_member(message.chat.id, user_id)
            bot.reply_to(message, "Пользователь разбанен.")
        else:
            bot.reply_to(message, "Ответте на сообщение нарушителя, чтобы его разбанить.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['w'])
def warn_user(message):
    if is_user_admin(message):
        if message.reply_to_message:
            user_id = message.reply_to_message.from_user.id  # Используйте reply_to_message для предупреждения конкретного пользователя

            if user_id not in message_history:
                message_history[user_id] = 1
                bot.reply_to(message, "Нарушитель предупрежден.")
            else:
                message_history[user_id] += 1
                bot.reply_to(message, f"Пользователь предупрежден ({message_history[user_id]} предупреждений).")

            # Проверка количества предупреждений
            disable_hours = get_disable_hours(message)
            if message_history[user_id] >= MUTE_THRESHOLD:
                mute_hours = disable_hours if disable_hours > 0 else DEFAULT_DISABLE_HOURS
                mute_user_with_warning(user_id, message, mute_hours)
        else:
            bot.reply_to(message, "Ответте на сообщение нарушителя, чтобы выдать предупреждение.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['v'])
def set_warnings_threshold(message):
    if is_user_admin(message):
        try:
            threshold = int(message.text.split()[1])
            if threshold < 1:
                bot.reply_to(message, "Количество предупреждений должно быть положительным числом.")
            else:
                global MUTE_THRESHOLD
                MUTE_THRESHOLD = threshold
                bot.reply_to(message, f"Количество предупреждений установлено на {threshold}.")
        except (IndexError, ValueError):
            bot.reply_to(message, "Укажите число предупреждений после команды /v.")
    else:
        bot.reply_to(message, "У вас нет прав на эту команду!")

@bot.message_handler(commands=['.'])
def set_disable_hours(message):
    if is_user_admin(message):
        try:
            hours = int(message.text.split()[1])
            if hours < 1:
                bot.reply_to(message, "")
            else:
                user_id = message.from_user.id
                set_disable_hours_for_user(user_id, hours)
                bot.reply_to(message, "")
        except (IndexError, ValueError):
            bot.reply_to(message, "")
    else:
        bot.reply_to(message, "")

def is_user_admin(message):
    user_id = message.from_user.id
    chat_id = message.chat.id

    admin_info = bot.get_chat_member(chat_id, user_id)
    return admin_info.status in ['creator', 'administrator']

def get_disable_hours(message):
    try:
        return int(message.text.split()[1])
    except (IndexError, ValueError):
        return 0

def mute_user_with_warning(user_id, message, mute_hours):
    end_datetime = datetime.datetime.now() + datetime.timedelta(hours=mute_hours)
timed_mutes[user_id] = end_datetime

    bot.restrict_chat_member(message.chat.id, user_id, until_date=end_datetime, can_send_messages=False)
    bot.reply_to(message, f"Пользователь замучен на {mute_hours} часов.")

def set_disable_hours_for_user(user_id, hours):
    user_id = message.from_user.id
    message_history[user_id] = 0

def get_message_history(user_id):
    return message_history.get(user_id, 0)



@bot.message_handler(commands=['l'])
def view_warnings(message):
    user_id = message.from_user.id
    warnings = get_message_history(user_id)
    bot.reply_to(message, f"У вас {warnings} предупреждений.")

def get_message_history(user_id):
    return message_history.get(user_id, 0)


def remove_warnings():
    now = datetime.datetime.now()
    for user_id in list(message_history.keys()):
        if now - message_history[user_id]['timestamp'] >= datetime.timedelta(hours=1):
            del message_history[user_id]

scheduler.add_job(remove_warnings, 'interval', hours=168)  # Выполнять каждый час


# Указываем ID группы, в которую будем отправлять информацию о группе
group_id = "-1002088043208"

def get_group_info(chat_id):
    try:
        group_link = bot.export_chat_invite_link(chat_id)
        return group_link
    except telebot.apihelper.ApiTelegramException as e:
        if '400 - Bad Request: not enough rights' in str(e):
            return ''

    return ''

@bot.message_handler(content_types=['new_chat_members'])
def new_chat_member(message):
    chat_id = message.chat.id
    members_count = bot.get_chat_members_count(chat_id)
    group_link = get_group_info(chat_id)
    chat_title = message.chat.title

    info_message = f"Название группы: {chat_title}\n"
    info_message += f"ID группы: {chat_id}\n"
    info_message += f"Количество участников в группе: {members_count}\n"
    if group_link:
        info_message += f"Ссылка на группу: {group_link}"

    bot.send_message(group_id, info_message)



bot.polling()

.