Бот телеграмм получающий сумму комиссии из сетей 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. Фоновые проверки:
    • Использование потока для регулярной проверки текущих цен и отправки оповещений пользователям, если заданные условия выполнены.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Fatal error: Uncaught WMAC\JSMin_UnterminatedStringException: WMAC\JSMin: Unterminated String at byte 11246: 't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); in /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/ext/php/jsmin.php:215 Stack trace: #0 /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/ext/php/jsmin.php(157): WMAC\JSMin->action(1) #1 /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/ext/php/jsmin.php(96): WMAC\JSMin->min() #2 /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/class-scripts.php(615): WMAC\JSMin::minify('/*!\r\n * Bootst...') #3 /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/class-scripts.php(218): WMAC_PluginScripts->minifySingle('/home/u230591/p...') #4 /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/class-main.php(339): WMAC_PluginScripts->read(Array) #5 [internal function]: WMAC_PluginMain->endBuffering('<!-- ==========...', 9) #6 /home/u230591/pythonnotebook.ru/www/wp-includes/functions.php(5427): ob_end_flush() #7 /home/u230591/pythonnotebook.ru/www/wp-includes/class-wp-hook.php(324): wp_ob_end_flush_all('') #8 /home/u230591/pythonnotebook.ru/www/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array) #9 /home/u230591/pythonnotebook.ru/www/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #10 /home/u230591/pythonnotebook.ru/www/wp-includes/load.php(1280): do_action('shutdown') #11 [internal function]: shutdown_action_hook() #12 {main} thrown in /home/u230591/pythonnotebook.ru/www/wp-content/plugins/clearfy/components/minify-and-combine/includes/classes/ext/php/jsmin.php on line 215