Бот телеграмм получающий сумму комиссии из сетей Ethereum и Bitcoin

Для написания Telegram-бота на Python с использованием библиотеки telebot, который будет показывать стоимость газа в сети Ethereum и Bitcoin, а также уведомлять пользователя, когда она падает до заданного уровня, нужно выполнить несколько шагов.

  1. Установка необходимых библиотек:
pip install pyTelegramBotAPI requests
  1. Создание бота:
    • Получите токен вашего бота у @BotFather в Telegram.
    • Получите API ключи для доступа к данным о стоимости газа (например, от Etherscan для Ethereum и от Blockchain.info для Bitcoin).
  2. Написание кода:
import telebot
import requests
from threading import Thread
import time

API_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
ETHERSCAN_API_KEY = 'YOUR_ETHERSCAN_API_KEY'
BOT = telebot.TeleBot(API_TOKEN)

# Словарь для хранения уровней оповещения пользователей
user_alerts = {}

# Функция для получения стоимости газа в сети Ethereum
def get_eth_gas_price():
    url = f'https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey={ETHERSCAN_API_KEY}'
    response = requests.get(url).json()
    return response['result']['SafeGasPrice']

# Функция для получения стоимости транзакции в сети Bitcoin
def get_btc_fee():
    url = 'https://api.blockchain.info/mempool/fees'
    response = requests.get(url).json()
    return response['regular']

# Функция для обработки команды /start
@BOT.message_handler(commands=['start'])
def send_welcome(message):
    BOT.reply_to(message, "Добро пожаловать! Я помогу вам следить за стоимостью газа в сетях Ethereum и Bitcoin.")

# Функция для обработки команды /set_alert
@BOT.message_handler(commands=['set_alert'])
def set_alert(message):
    try:
        _, currency, price = message.text.split()
        price = float(price)
        user_alerts[message.chat.id] = (currency, price)
        BOT.reply_to(message, f"Оповещение установлено для {currency} на уровне {price}.")
    except ValueError:
        BOT.reply_to(message, "Использование: /set_alert <ETH/BTC> <цена>")

# Функция для проверки уровней оповещения
def check_alerts():
    while True:
        for chat_id, (currency, price) in list(user_alerts.items()):
            if currency == 'ETH':
                current_price = float(get_eth_gas_price())
            elif currency == 'BTC':
                current_price = float(get_btc_fee())
            else:
                continue
            
            if current_price <= price:
                BOT.send_message(chat_id, f"Стоимость газа {currency} упала до {current_price}.")
                del user_alerts[chat_id]
        time.sleep(60)  # Проверка каждую минуту

# Запуск потока для проверки уровней оповещения
alert_thread = Thread(target=check_alerts)
alert_thread.start()

# Функция для обработки команды /gas_price
@BOT.message_handler(commands=['gas_price'])
def gas_price(message):
    eth_price = get_eth_gas_price()
    btc_fee = get_btc_fee()
    BOT.reply_to(message, f"Текущая стоимость газа в сети Ethereum: {eth_price}\nТекущая стоимость транзакции в сети Bitcoin: {btc_fee}")

# Запуск бота
BOT.polling()

Пояснения к коду:

  1. Библиотеки:
    • telebot: Библиотека для взаимодействия с API Telegram.
    • requests: Библиотека для выполнения HTTP-запросов.
  2. Функции:
    • get_eth_gas_price(): Получает текущую стоимость газа в сети Ethereum с помощью API Etherscan.
    • get_btc_fee(): Получает текущую стоимость транзакции в сети Bitcoin с помощью API Blockchain.info.
  3. Команды:
    • /start: Приветственное сообщение.
    • /set_alert <ETH/BTC> <цена>: Установка оповещения для указанной валюты при достижении заданной цены.
    • /gas_price: Получение текущей стоимости газа в сетях Ethereum и Bitcoin.
  4. Фоновые проверки:
    • Использование потока для регулярной проверки текущих цен и отправки оповещений пользователям, если заданные условия выполнены.

Этот пример можно дополнительно адаптировать под ваши конкретные требования и улучшить, добавив, например, больше проверок и обработку ошибок.

Рейтинг
( Пока оценок нет )
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: