May 9

Запилил алерты и АХУЕЛ!!!

Изначально мой бот был тупым калькулятором:

  • Раз в 10 минут долбил CoinGecko API
  • Кэшировал курсы, чтобы не задудосили
  • Конвертил BTC в USD и обратно — ну просто пиздец как скучно

Но потом я решил: «Хочу, чтобы бот орал, когда крипта летит к хуям или в космос!»

1. Переход на WebSocket Binance

CoinGecko — лажа, там нет вебсокетов. Пришлось подключать Binance.

Что ожидал:

  • Красивые алерты в реальном времени
  • Умный бот, который не спамит

Что получил:

  • Говнокод, который падает с синтаксическими ошибками
  • Бесконечные костыли

2. Первая жесть: серверный пиздец

На компе всё работало, а на сервере — SyntaxError в строке:

f"{random.choice(ALERT_TEMPLATES).format(...)}"  # Сервер просто АХУЕЛ

Что сделал:
Разбил на две строки, ибо сервер — долбоёб:

alert = random.choice(ALERT_TEMPLATES)  # Сначала шаблон  
message = alert.format(...)            # Потом подстановка  

Вывод:
Локальный тест ≠ продакшен. Сервер — это пиздец.


3. Пропадающие настройки: пиздец в квадрате

Включил алерты на BTC, перешёл в конвертер — настройки слетели.

В чём проблема?
Оказалось, конвертер перезаписывал всю хуйню:

user_data = {
    "alerts": ["BTC"],  # Это пиздец как неправильно  
    "conversion": {}    # Конвертер затирал алерты!  
}

Как починил:
Сделал нормальную структуру:

user_data = {
    "alerts": {"coins": ["BTC"]},  # Теперь не перезаписывается  
    "conversion": {}               # Живёт отдельно  
}

Итог:
JSON и datetime — ебучие уёбки.


4. Конфликт ботов: адский пиздец

Запустил нового бота — старый не хотел умирать.

Логи:

TelegramConflictError: другой экземпляр уже работает!  

Что пробовал:

sudo pkill -f "python.*bot.py"  # Не помогло  
kill -9 <PID>                   # Тоже мимо  
systemctl restart mybot         # Зомби оживал  

Решение:
Добавил в systemd:

KillMode=process  

И просто подождал 2 минуты — Telegram API тормознутое говно.


5. Спам-апокалипсис: бот ебнулся

Когда ETH подскочила на 7%, бот начал нести хуйню:

[12:00] ОХУЕТЬ! SOL +5%!  
[12:01] ОХУЕТЬ! SOL +5.1%!  
[12:02] ОХУЕТЬ! SOL +4.9%!  

Как пофиксил:
Добавил дебаунсинг и порог срабатывания:

def need_alert(crypto, change):
    return (
        abs(change) > 5.0               # Не меньше 5%  
        and (time.time() - last_alert) > 300  # Раз в 5 минут  
    )

Вывод:
Без ограничений бот превращается в еблана-спамера.


Итог: что получилось

Алерты в реальном времени — WebSocket рулит
Яркие уведомления
Стабильная работа — после тонны костылей

Выводы:

  1. Логируй всё — без логов ты в жопе.
  2. Тестируй на сервере — локально ≠ продакшен.
  3. Не доверяй datetime — JSON его ненавидит.
  4. systemd — мразь — убивать процессы надо жёстко.
Главный урок:
«Если код работает с первого раза — значит, ты что-то забыл.»

Гитфлик: [https://gitflic.ru/project/system_develop/kripto_bot] | ТГ-канал: [https://t.me/system_develop]

P.S. Если найдёте баги — пишите в комменты🚀