import logging import vk_api from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType import time from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch # Настройка логирования logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) model_path = "RUSpam/spam_deberta_v4" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForSequenceClassification.from_pretrained(model_path) GROUP_ID = "" ACCESS_TOKEN = "" THRESHOLD_REACTIONS = 3 def is_spam(message): inputs = tokenizer(message, return_tensors="pt", truncation=True, max_length=256) with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits predicted_class = torch.argmax(logits, dim=1).item() return predicted_class == 1 # Основной класс бота class VkBot: def __init__(self, group_id, token): self.group_id = group_id self.vk_session = vk_api.VkApi(token=token) self.vk = self.vk_session.get_api() self.longpoll = VkBotLongPoll(self.vk_session, group_id) self.message_reactions = {} def run(self): logger.info("Бот запущен!") for event in self.longpoll.listen(): if event.type == VkBotEventType.MESSAGE_NEW: message = event.object['message'] user_id = message["from_id"] peer_id = message["peer_id"] message_id = message["conversation_message_id"] text = message["text"] if peer_id > 2_000_000_000 and is_spam(text): logger.warning(f"Обнаружено спам-сообщение от пользователя {user_id}: {text}") self.delete_message(peer_id=peer_id, user_id=user_id, message_id=message_id) def delete_message(self, peer_id, user_id, message_id): """Удалить сообщение""" if not self.is_conservation_admin(peer_id=peer_id, user_id=user_id): self.vk.messages.delete(cmids=message_id, peer_id=peer_id) logger.info(f"Сообщение {message_id} удалено из беседы {peer_id} пользователем {user_id}.") def is_conservation_admin(self, peer_id, user_id): """Проверка пользователя на администратора беседы.""" members = self.vk.messages.getConversationMembers(peer_id=peer_id) for member in members['items']: if member['member_id'] == user_id: return member['is_admin'] return False # Запуск бота if __name__ == "__main__": bot = VkBot(GROUP_ID, ACCESS_TOKEN) bot.run()