Aktualizovat telegram_bot/bot.py

This commit is contained in:
Tetiana Mohorian 2025-05-20 11:04:30 +00:00
parent 3f46dfbb0a
commit 78278ba469

View File

@ -7,14 +7,14 @@ from telegram.ext import Application, MessageHandler, filters, CommandHandler, C
from dotenv import load_dotenv from dotenv import load_dotenv
import mysql.connector import mysql.connector
# Load environment variables from .env file
# Загрузка переменных окружения из .env
load_dotenv() load_dotenv()
TOKEN = os.getenv("TOKEN") TOKEN = os.getenv("TOKEN")
# Путь к модели # Path to the model
MODEL_PATH = "./hate_speech_model/final_model" MODEL_PATH = "./hate_speech_model/final_model"
# Database configuration
db_config = { db_config = {
"host": "mysql", "host": "mysql",
"user": "root", "user": "root",
@ -23,7 +23,7 @@ db_config = {
} }
def save_violator(username, message): def save_violator(username, message):
"""Сохраняет нарушителя в базу данных""" """Saves the violator's message to the database"""
try: try:
conn = mysql.connector.connect(**db_config) conn = mysql.connector.connect(**db_config)
cursor = conn.cursor() cursor = conn.cursor()
@ -33,10 +33,9 @@ def save_violator(username, message):
cursor.close() cursor.close()
conn.close() conn.close()
except mysql.connector.Error as err: except mysql.connector.Error as err:
logging.error(f"Ошибка MySQL: {err}") logging.error(f"MySQL error: {err}")
# Logging setup
# Настройка логирования
logging.basicConfig( logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s", format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.INFO, level=logging.INFO,
@ -46,13 +45,13 @@ logging.basicConfig(
] ]
) )
# Загрузка модели и токенизатора # Load tokenizer and model
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH).to(device) model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH).to(device)
def classify_text(text): def classify_text(text):
"""Функция для классификации текста""" """Classifies the input text"""
model.eval() model.eval()
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding="max_length", max_length=128).to(device) inputs = tokenizer(text, return_tensors="pt", truncation=True, padding="max_length", max_length=128).to(device)
@ -62,35 +61,35 @@ def classify_text(text):
logits = outputs.logits logits = outputs.logits
pred = torch.argmax(logits, dim=-1).item() pred = torch.argmax(logits, dim=-1).item()
return "🛑 Nenávistná reč" if pred == 1 else "✅ OK" return "🛑 Hate speech detected" if pred == 1 else "✅ OK"
async def check_message(update: Update, context: CallbackContext): async def check_message(update: Update, context: CallbackContext):
"""Проверяет сообщения в чате и реагирует на токсичные сообщения""" """Checks chat messages and reacts to toxic content"""
message_text = update.message.text message_text = update.message.text
result = classify_text(message_text) result = classify_text(message_text)
if result == "🛑 Nenávistná reč": if result == "🛑 Hate speech detected":
username = update.message.from_user.username or "unknown" username = update.message.from_user.username or "unknown"
await update.message.reply_text("⚠️ Upozornenie! Dodržiavajte kultúru komunikácie.") await update.message.reply_text("⚠️ Warning! Please maintain respectful communication.")
await update.message.delete() # Автоматическое удаление токсичных сообщений await update.message.delete() # Automatically deletes toxic message
# Логирование токсичного сообщения # Log the toxic message
logging.warning(f"Toxická správa od {update.message.from_user.username}: {message_text}") logging.warning(f"Toxic message from {username}: {message_text}")
save_violator(username, message_text) save_violator(username, message_text)
async def start(update: Update, context: CallbackContext): async def start(update: Update, context: CallbackContext):
"""Отправляет приветственное сообщение при запуске бота""" """Sends welcome message on /start"""
await update.message.reply_text("Ahoj! Sledujem kultúru komunikácie v chate!") await update.message.reply_text("Hi! I'm monitoring the chat for hate speech!")
def main(): def main():
"""Запуск бота""" """Starts the bot"""
app = Application.builder().token(TOKEN).build() app = Application.builder().token(TOKEN).build()
# Добавление обработчиков команд и сообщений # Register command and message handlers
app.add_handler(CommandHandler("start", start)) app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, check_message)) app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, check_message))
# Запуск бота # Start polling
app.run_polling() app.run_polling()
if __name__ == "__main__": if __name__ == "__main__":