Skip to content

avitopars #352

@azam-kan

Description

@azam-kan

import telebot
import sqlite3
from parser import AvitoParser
import time
from threading import Thread

class NotificationBot:
def init(self, token):
self.bot = telebot.TeleBot(token)
self.parser = AvitoParser()
self.setup_handlers()

def setup_handlers(self):
    @self.bot.message_handler(commands=['start'])
    def start(message):
        self.bot.reply_to(message,
            "🔍 Бот для отслеживания объявлений на Avito\n\n"
            "Команды:\n"
            "/add_filter - Добавить фильтр\n"
            "/my_filters - Мои фильтры\n"
            "/stats - Статистика\n"
            "/help - Помощь"
        )
    
    @self.bot.message_handler(commands=['add_filter'])
    def add_filter(message):
        msg = self.bot.reply_to(message, "Введите запрос для поиска:")
        self.bot.register_next_step_handler(msg, self.process_query)

def send_notification(self, chat_id, ad):
    """Отправляет уведомление о новом объявлении"""
    message = f"""

🔥 НОВОЕ ОБЪЯВЛЕНИЕ

{ad['title']}

💰 Цена: {ad['price']:,} руб.
📍 {ad['location']}
📅 {ad['date']}

{ad['description'][:200]}...

Ссылка на объявление
"""

    # Отправляем текст
    self.bot.send_message(chat_id, message, parse_mode='Markdown')
    
    # Отправляем первое изображение если есть
    images = ad.get('images', [])
    if images:
        try:
            self.bot.send_photo(chat_id, images[0])
        except:
            pass
    
    # Отмечаем как отправленное
    conn = sqlite3.connect('avito_ads.db')
    cursor = conn.cursor()
    cursor.execute(
        'INSERT INTO sent_notifications (ad_id, chat_id) VALUES (?, ?)',
        (ad['id'], chat_id)
    )
    conn.commit()
    conn.close()

def monitoring_loop(self):
    """Основной цикл мониторинга"""
    while True:
        try:
            # Получаем все активные подписки
            conn = sqlite3.connect('avito_ads.db')
            cursor = conn.cursor()
            cursor.execute('SELECT chat_id, filters FROM users WHERE active = 1')
            users = cursor.fetchall()
            conn.close()
            
            for chat_id, filters_json in users:
                filters = json.loads(filters_json)
                new_ads = self.parser.get_new_ads(filters)
                
                for ad in new_ads:
                    # Проверяем, не отправляли ли уже
                    conn = sqlite3.connect('avito_ads.db')
                    cursor = conn.cursor()
                    cursor.execute(
                        'SELECT * FROM sent_notifications WHERE ad_id = ? AND chat_id = ?',
                        (ad['id'], chat_id)
                    )
                    if not cursor.fetchone():
                        self.send_notification(chat_id, ad)
                    conn.close()
            
            time.sleep(300)  # Проверка каждые 5 минут
            
        except Exception as e:
            print(f"Ошибка в мониторинге: {e}")
            time.sleep(60)

if name == 'main':
bot = NotificationBot('ВАШ_ТОКЕН')

# Запускаем мониторинг в отдельном потоке
monitor_thread = Thread(target=bot.monitoring_loop)
monitor_thread.daemon = True
monitor_thread.start()

# Запускаем бота
bot.bot.polling(none_stop=True)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions