import json
from telegram import Update
from telegram.ext import (ApplicationBuilder, ContextTypes, MessageHandler,
filters)
from app.env_conf import SETTINGS
from app.tools import logger, MinioInit, init_logging
from app.utils import embed
init_logging()
THRESHOLD = 0.5
logger.info('Загружаем модель из s3')
mi = MinioInit()
clf = mi.load_data('model/spam_ham_n.pkl')
with open("model/whitelist.json", "r") as fp:
whitelist = json.load(fp)
whitelist = set(whitelist)
def score(txt):
return clf.predict_proba(embed(txt.strip()).reshape(1, -1))[0, 1]
logger.info("Грузим модель")
s = score("От 300 $ в день")
logger.info('score: %s', s)
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
if update.message:
message_text = update.message.text
user_id = update.message.from_user.id
chat_id = update.message.chat_id
username = update.message.from_user.username or "Неизвестный пользователь"
if message_text:
message_score = score(message_text)
logger.info("score: %s. message_text: %s", message_score, message_text)
if message_score >= THRESHOLD:
logger.info("-" * 50)
logger.info(f"Обнаружено сообщение с ID {update.message.message_id}, похожее на спам'")
if str(user_id) in whitelist:
logger.info(f"Пользователь {username} в вайтлисте")
else:
# 1. Удаляем сообщение
await update.message.delete()
logger.info(f"Удалено сообщение с ID {update.message.message_id}")
logger.info(update.message.to_json())
# 2. Баним пользователя
try:
await context.bot.ban_chat_member(chat_id=chat_id, user_id=user_id)
logger.info(f"Пользователь @{username} (ID: {user_id}) заблокирован.")
except Exception as e:
logger.error(f"Не удалось заблокировать пользователя @{username} (ID: {user_id}): {e}")
def main():
application = ApplicationBuilder().token(SETTINGS.BOT_TOKEN).build()
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
logger.info("Бот запущен и мониторит чат...")
application.run_polling()
logger.info("Закончили работу...")
if __name__ == "__main__":
main()
Post #1381
262
А вот так он потом работает