Изменение сообщений БОТОМ телеграм

Хочу сделать бота в телеграмм, который будет автоматически заменять мат в сообщениях от участников чата (Не в своих, именно в чужих) Идея вот такая:

В Боте есть команды "/Мат да" "/Мат нет" "/Мат (число)"

Когда АДМИНИСТРАТОР (другие не могут пользоваться этими командами) напишет Мат нет, то бот будет автоматически заменять бранные слова и выражения тремя звездочками, например Бл#ть заменит как ***

когда администратор напишет Мат да то все запреты снимутся

Команда Мат (число) - эта команда работает только когда разрешен мат, (число) это то количество сообщений спустя которое можно снова написать мат, если админ напишет команду Мат 5, то после сообщения с матами нужно написать 5 сообщений без, иначе маты будут заменяться звездочками, чтобы отключить функцию надо написать Мат 0.

Но к сожалению бот не может сделать этого и отправляет ошибку

Ошибка при обработке сообщения: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message can't be edited

Пробовал различные способы но ничего не помогло. Вот полный код:

import telebot
import time
from telebot import types

# --- Настройки ---
BOT_TOKEN = 'UNIQUE_TOKEN'  # Замените на токен вашего бота

# --- Глобальные переменные ---
bot = telebot.TeleBot(BOT_TOKEN)

# --- Словарь для хранения настроек по чатам ---
chat_settings = {}

# --- Список запрещенных слов ---
bad_words = ["блядь", "сука", "нахер", "хуй", "пизда"]

# --- Функция для замены мата на *** ---
def censor_message(text):
    for word in bad_words:
        text = text.replace(word, "***", -1)  # Заменяем все вхождения
    return text

# --- Обработчик команд /мат ---
@bot.message_handler(func=lambda message: message.text.startswith("/мат"))
def handle_profanity_command(message):
    chat_id = message.chat.id

    # --- Инициализация настроек для чата, если их нет ---
    if chat_id not in chat_settings:
        chat_settings[chat_id] = {
            'is_profanity_allowed': False,
            'profanity_counter': 0,
            'profanity_limit': 0
        }

    is_profanity_allowed = chat_settings[chat_id]['is_profanity_allowed']
    profanity_counter = chat_settings[chat_id]['profanity_counter']
    profanity_limit = chat_settings[chat_id]['profanity_limit']

    # --- Проверка прав администратора ---
    try:
        chat_member = bot.get_chat_member(chat_id, message.from_user.id)
        if chat_member.status not in ['creator', 'administrator']:
            bot.reply_to(
                message, "Извините, эта команда доступна только администраторам."
            )
            return
    except telebot.apihelper.ApiTelegramException as e:
        print(f"Ошибка при проверке прав администратора: {e}")
        bot.reply_to(message, "Произошла ошибка при проверке прав.")
        return

    # --- Обработка команды /мат (только для администраторов) ---
    command = message.text.split()
    if len(command) == 2:
        if command[1].lower() == "да":
            chat_settings[chat_id]['is_profanity_allowed'] = True
            try:
                bot.reply_to(message, "Мат разрешен.")
            except telebot.apihelper.ApiTelegramException as e:
                print(f"Ошибка при ответе на сообщение: {e}")
        elif command[1].lower() == "нет":
            chat_settings[chat_id]['is_profanity_allowed'] = False
            chat_settings[chat_id]['profanity_limit'] = 0  # Сбрасываем лимит
            try:
                bot.reply_to(message, "Мат запрещен.")
            except telebot.apihelper.ApiTelegramException as e:
                print(f"Ошибка при ответе на сообщение: {e}")
        elif command[1].isdigit() and chat_settings[chat_id]['is_profanity_allowed']:
            chat_settings[chat_id]['profanity_limit'] = int(command[1])
            chat_settings[chat_id]['profanity_counter'] = 0
            try:
                bot.reply_to(
                    message,
                    f"Лимит мата установлен на {chat_settings[chat_id]['profanity_limit']} сообщений.",
                )
            except telebot.apihelper.ApiTelegramException as e:
                print(f"Ошибка при ответе на сообщение: {e}")
        else:
            try:
                bot.reply_to(
                    message,
                    "Неверная команда или мат запрещен. Используйте: /мат да, /мат нет, или /мат (число) (только при разрешенном мате)",
                )
            except telebot.apihelper.ApiTelegramException as e:
                print(f"Ошибка при ответе на сообщение: {e}")
    else:
        try:
            bot.reply_to(
                message,
                "Неверная команда. Используйте: /мат да, /мат нет, или /мат (число)",
            )
        except telebot.apihelper.ApiTelegramException as e:
            print(f"Ошибка при ответе на сообщение: {e}")

# --- Обработчик сообщений ---
@bot.message_handler(func=lambda message: True)
def handle_message(message):
    chat_id = message.chat.id
    message_id = message.message_id  # Получаем ID сообщения

    # --- Инициализация настроек для чата, если их нет ---
    if chat_id not in chat_settings:
        chat_settings[chat_id] = {
            'is_profanity_allowed': False,
            'profanity_counter': 0,
            'profanity_limit': 0
        }

    # --- Пропускаем сообщения от самого бота ---
    if message.from_user.id == bot.get_me().id:
        return

    is_profanity_allowed = chat_settings[chat_id]['is_profanity_allowed']
    profanity_counter = chat_settings[chat_id]['profanity_counter']
    profanity_limit = chat_settings[chat_id]['profanity_limit']

    # --- Проверка на наличие мата в сообщении ---
    message_text_lower = message.text.lower()
    contains_profanity = any(word in message_text_lower for word in bad_words)

    # --- Увеличиваем счетчик сообщений после каждого сообщения ---
    chat_settings[chat_id]['profanity_counter'] += 1

    if is_profanity_allowed and profanity_limit > 0 and contains_profanity:
        if profanity_counter <= profanity_limit:
            censored_text = censor_message(message.text)
            try:
                bot.edit_message_text(censored_text, chat_id, message_id)
            except telebot.apihelper.ApiTelegramException as e:
                print(f"Ошибка при обработке сообщения: {e}")
        else:
            chat_settings[chat_id]['profanity_counter'] = 0
    elif not is_profanity_allowed and contains_profanity:
        censored_text = censor_message(message.text)
        try:
            bot.edit_message_text(censored_text, chat_id, message_id)
        except telebot.apihelper.ApiTelegramException as e:
            print(f"Ошибка при обработке сообщения: {e}")

# --- Запуск бота ---
bot.polling(none_stop=True)

Ответы (0 шт):