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
import mysql.connector
# Загрузка переменных окружения из .env
# Load environment variables from .env file
load_dotenv()
TOKEN = os.getenv("TOKEN")
# Путь к модели
# Path to the model
MODEL_PATH = "./hate_speech_model/final_model"
# Database configuration
db_config = {
"host": "mysql",
"user": "root",
@ -23,7 +23,7 @@ db_config = {
}
def save_violator(username, message):
"""Сохраняет нарушителя в базу данных"""
"""Saves the violator's message to the database"""
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
@ -33,10 +33,9 @@ def save_violator(username, message):
cursor.close()
conn.close()
except mysql.connector.Error as err:
logging.error(f"Ошибка MySQL: {err}")
logging.error(f"MySQL error: {err}")
# Настройка логирования
# Logging setup
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.INFO,
@ -46,13 +45,13 @@ logging.basicConfig(
]
)
# Загрузка модели и токенизатора
# Load tokenizer and model
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):
"""Функция для классификации текста"""
"""Classifies the input text"""
model.eval()
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
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):
"""Проверяет сообщения в чате и реагирует на токсичные сообщения"""
"""Checks chat messages and reacts to toxic content"""
message_text = update.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"
await update.message.reply_text("⚠️ Upozornenie! Dodržiavajte kultúru komunikácie.")
await update.message.delete() # Автоматическое удаление токсичных сообщений
await update.message.reply_text("⚠️ Warning! Please maintain respectful communication.")
await update.message.delete() # Automatically deletes toxic message
# Логирование токсичного сообщения
logging.warning(f"Toxická správa od {update.message.from_user.username}: {message_text}")
# Log the toxic message
logging.warning(f"Toxic message from {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!")
"""Sends welcome message on /start"""
await update.message.reply_text("Hi! I'm monitoring the chat for hate speech!")
def main():
"""Запуск бота"""
"""Starts the bot"""
app = Application.builder().token(TOKEN).build()
# Добавление обработчиков команд и сообщений
# Register command and message handlers
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, check_message))
# Запуск бота
# Start polling
app.run_polling()
if __name__ == "__main__":