Odstranit z2/bot.py

This commit is contained in:
Tetiana Mohorian 2025-05-20 10:59:42 +00:00
parent bda6f0665a
commit fca3cab82c

View File

@ -1,97 +0,0 @@
import os
import torch
import logging
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, CommandHandler, CallbackContext
from dotenv import load_dotenv
import mysql.connector
# Загрузка переменных окружения из .env
load_dotenv()
TOKEN = os.getenv("TOKEN")
# Путь к модели
MODEL_PATH = "./hate_speech_model/final_model"
db_config = {
"host": "mysql",
"user": "root",
"password": "0674998280tanya",
"database": "telegram_bot"
}
def save_violator(username, message):
"""Сохраняет нарушителя в базу данных"""
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
query = "INSERT INTO violators (username, message) VALUES (%s, %s)"
cursor.execute(query, (username, message))
conn.commit()
cursor.close()
conn.close()
except mysql.connector.Error as err:
logging.error(f"Ошибка MySQL: {err}")
# Настройка логирования
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.INFO,
handlers=[
logging.FileHandler("log.txt"),
logging.StreamHandler()
]
)
# Загрузка модели и токенизатора
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH).to(device)
def classify_text(text):
"""Функция для классификации текста"""
model.eval()
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding="max_length", max_length=128).to(device)
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
pred = torch.argmax(logits, dim=-1).item()
return "🛑 Nenávistná reč" if pred == 1 else "✅ OK"
async def check_message(update: Update, context: CallbackContext):
"""Проверяет сообщения в чате и реагирует на токсичные сообщения"""
message_text = update.message.text
result = classify_text(message_text)
if result == "🛑 Nenávistná reč":
username = update.message.from_user.username or "unknown"
await update.message.reply_text("⚠️ Upozornenie! Dodržiavajte kultúru komunikácie.")
await update.message.delete() # Автоматическое удаление токсичных сообщений
# Логирование токсичного сообщения
logging.warning(f"Toxická správa od {update.message.from_user.username}: {message_text}")
save_violator(username, message_text)
async def start(update: Update, context: CallbackContext):
"""Отправляет приветственное сообщение при запуске бота"""
await update.message.reply_text("Ahoj! Sledujem kultúru komunikácie v chate!")
def main():
"""Запуск бота"""
app = Application.builder().token(TOKEN).build()
# Добавление обработчиков команд и сообщений
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, check_message))
# Запуск бота
app.run_polling()
if __name__ == "__main__":
main()