Задать вопрос
@ZeckaGamess

Почему у меня не работают команды: kick, ban, mut?

from telegram import Update, ChatPermissions
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from datetime import datetime, timedelta
from collections import defaultdict

# Токен бота и ID чатов
TOKEN = 'пап'
MODERATION_CHAT_ID = щ  # Чат для модерирования
REPORT_CHAT_ID = -щ       # Чат для отчетов

# Словари для отслеживания предупреждений и сообщений пользователей
user_warnings = defaultdict(int)
user_messages = defaultdict(list)

# Текст правил
RULES_TEXT = """
Правила чата:
1. Запрещены спам, флуд и провокации, направленные на нарушения.
2. Запрещены попрошайничество и вымогательство.
3. Запрещена публикация материалов оскорбительного, насильственного, жестокого и экстремистского характера.
4. Недопустимо унижать и оскорблять других пользователей.
5. Запрещено выдавать себя за представителей администрации или модерации.
6. Запрещено отправлять потенциально опасные ссылки и файлы.
7. Обман администрации или модерации строго запрещен.
8. Запрещен пиар других групп, YouTube-каналов и любых сторонних ресурсов.
9. Запрещен контент 18+.
10. Запрещены оскорбления на национальной почве и любые проявления фашизма и ненависти.
"""

# Функция для отправки правил новому пользователю
async def welcome(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    new_member = update.message.new_chat_members[0]
    if update.message.chat_id == MODERATION_CHAT_ID:
        welcome_message = await update.message.reply_text(
            f"Привет, {new_member.mention_html()}! Добро пожаловать в чат! Вот наши правила:\n{RULES_TEXT}",
            parse_mode="HTML"
        )
        # Удаляем сообщение с правилами через минуту
        await context.job_queue.run_once(lambda _: welcome_message.delete(), timedelta(minutes=1))

# Проверка на спам и дудос
async def monitor_activity(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    # Проверяем, что update.message существует и чат является целевым
    if update.message and update.message.chat_id == MODERATION_CHAT_ID:
        user_id = update.message.from_user.id
        chat_id = update.message.chat_id
        current_time = datetime.now()

        # Записываем время сообщения
        user_messages[user_id].append(current_time)
        # Очищаем старые сообщения
        user_messages[user_id] = [msg_time for msg_time in user_messages[user_id] if current_time - msg_time < timedelta(seconds=10)]

        # Если больше 5 сообщений за 10 секунд — мутим и предупреждаем
        if len(user_messages[user_id]) > 5:
            if user_warnings[user_id] < 10:
                user_warnings[user_id] += 1
                await update.message.reply_text(f"Предупреждение {user_warnings[user_id]}/10. Пожалуйста, не спамьте.")
                await context.bot.restrict_chat_member(
                    chat_id, user_id, permissions=ChatPermissions(can_send_messages=False), until_date=current_time + timedelta(minutes=1)
                )
                await context.bot.send_message(chat_id, f"{update.message.from_user.mention_html()}, вы получили мут на 1 минуту за подозрительную активность. Причина: спам. Модератор: Бот", parse_mode="HTML")
                await context.bot.send_message(REPORT_CHAT_ID, f"Пользователь {update.message.from_user.mention_html()} получил мут на 1 минуту за подозрительную активность.", parse_mode="HTML")
            else:
                await update.message.reply_text("Вы забанены за систематические нарушения.")
                await context.bot.ban_chat_member(chat_id, user_id)
                await context.bot.send_message(chat_id, f"{update.message.from_user.mention_html()}, вы забанены за превышение лимита предупреждений. Модератор: Бот", parse_mode="HTML")
                await context.bot.send_message(REPORT_CHAT_ID, f"Пользователь {update.message.from_user.mention_html()} забанен за превышение лимита предупреждений.", parse_mode="HTML")

# Проверка на ключевую фразу "Guarding Fiira's Ass"
async def respond_to_keyphrase(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if update.message.chat_id == MODERATION_CHAT_ID and "Guarding Fiira's Ass" in update.message.text:
        await update.message.reply_text("Лучшая система защиты жопы приветствует вас!")
        await context.bot.send_message(REPORT_CHAT_ID, "Пользователь использовал фразу 'Guarding Fiira's Ass'. Отправлено приветствие.")

# Команда /ban для администраторов
async def ban(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if update.message.chat_id == MODERATION_CHAT_ID and update.message.reply_to_message:
        if update.message.chat.get_member(update.message.from_user.id).status in ['administrator', 'creator']:
            user = update.message.reply_to_message.from_user
            await context.bot.ban_chat_member(update.message.chat_id, user.id)
            await update.message.reply_text(f"{user.mention_html()} забанен.", parse_mode="HTML")
            await context.bot.send_message(REPORT_CHAT_ID, f"Пользователь {user.mention_html()} был забанен администратором {update.message.from_user.mention_html()}.", parse_mode="HTML")
            await context.bot.send_message(update.message.chat_id, f"{user.mention_html()}, вы были забанены. Модератор: {update.message.from_user.mention_html()}", parse_mode="HTML")

# Команда /mute для администраторов
async def mute(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if update.message.chat_id == MODERATION_CHAT_ID and update.message.reply_to_message:
        if update.message.chat.get_member(update.message.from_user.id).status in ['administrator', 'creator']:
            user = update.message.reply_to_message.from_user
            await context.bot.restrict_chat_member(
                update.message.chat_id, user.id, permissions=ChatPermissions(can_send_messages=False), until_date=datetime.now() + timedelta(minutes=1)
            )
            await update.message.reply_text(f"{user.mention_html()} получил мут на 1 минуту.", parse_mode="HTML")
            await context.bot.send_message(REPORT_CHAT_ID, f"Пользователь {user.mention_html()} был замучен администратором {update.message.from_user.mention_html()}.", parse_mode="HTML")
            await context.bot.send_message(update.message.chat_id, f"{user.mention_html()}, вы получили мут на 1 минуту. Модератор: {update.message.from_user.mention_html()}", parse_mode="HTML")

# Команда /kick для администраторов
async def kick(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    if update.message.chat_id == MODERATION_CHAT_ID and update.message.reply_to_message:
        if update.message.chat.get_member(update.message.from_user.id).status in ['administrator', 'creator']:
            user = update.message.reply_to_message.from_user
            await context.bot.kick_chat_member(update.message.chat_id, user.id)
            await update.message.reply_text(f"{user.mention_html()} был кикнут из чата.", parse_mode="HTML")
            await context.bot.send_message(REPORT_CHAT_ID, f"Пользователь {user.mention_html()} был кикнут администратором {update.message.from_user.mention_html()}.", parse_mode="HTML")
            await context.bot.send_message(update.message.chat_id, f"{user.mention_html()}, вы были кикнуты. Модератор: {update.message.from_user.mention_html()}", parse_mode="HTML")

def main():
    application = Application.builder().token(TOKEN).build()

    # Обработчики команд
    application.add_handler(CommandHandler("ban", ban))
    application.add_handler(CommandHandler("mute", mute))
    application.add_handler(CommandHandler("kick", kick))

    # Обработчик для новых пользователей
    application.add_handler(MessageHandler(filters.StatusUpdate.NEW_CHAT_MEMBERS, welcome))

    # Обработчик для сообщений с ключевой фразой
    application.add_handler(MessageHandler(filters.TEXT & filters.Regex("Guarding Fiira's Ass"), respond_to_keyphrase))

    # Обработчик для спама и дудоса
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, monitor_activity))

    application.run_polling()

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы