Изменение сообщений БОТОМ телеграм
Хочу сделать бота в телеграмм, который будет автоматически заменять мат в сообщениях от участников чата (Не в своих, именно в чужих) Идея вот такая:
В Боте есть команды "/Мат да" "/Мат нет" "/Мат (число)"
Когда АДМИНИСТРАТОР (другие не могут пользоваться этими командами) напишет Мат нет, то бот будет автоматически заменять бранные слова и выражения тремя звездочками, например Бл#ть заменит как ***
когда администратор напишет Мат да то все запреты снимутся
Команда Мат (число) - эта команда работает только когда разрешен мат, (число) это то количество сообщений спустя которое можно снова написать мат, если админ напишет команду Мат 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)