Aktualizovat telegram_bot/bot.py
This commit is contained in:
parent
3f46dfbb0a
commit
78278ba469
@ -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__":
|
||||||
|
Loading…
Reference in New Issue
Block a user