Для написания Telegram-бота на Python с использованием библиотеки telebot
, который будет показывать стоимость газа в сети Ethereum и Bitcoin, а также уведомлять пользователя, когда она падает до заданного уровня, нужно выполнить несколько шагов.
- Установка необходимых библиотек:
pip install pyTelegramBotAPI requests
- Создание бота:
- Получите токен вашего бота у @BotFather в Telegram.
- Получите API ключи для доступа к данным о стоимости газа (например, от
Etherscan
для Ethereum и отBlockchain.info
для Bitcoin).
- Написание кода:
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()
Пояснения к коду:
- Библиотеки:
telebot
: Библиотека для взаимодействия с API Telegram.requests
: Библиотека для выполнения HTTP-запросов.
- Функции:
get_eth_gas_price()
: Получает текущую стоимость газа в сети Ethereum с помощью API Etherscan.get_btc_fee()
: Получает текущую стоимость транзакции в сети Bitcoin с помощью API Blockchain.info.
- Команды:
/start
: Приветственное сообщение./set_alert <ETH/BTC> <цена>
: Установка оповещения для указанной валюты при достижении заданной цены./gas_price
: Получение текущей стоимости газа в сетях Ethereum и Bitcoin.
- Фоновые проверки:
- Использование потока для регулярной проверки текущих цен и отправки оповещений пользователям, если заданные условия выполнены.
Этот пример можно дополнительно адаптировать под ваши конкретные требования и улучшить, добавив, например, больше проверок и обработку ошибок.