Бот позволяет оперативно отслеживать достижение определенного ценового диапазона в заданном перечне пар. Сообщение о срабатывании события приходит пользователю в telegram.

Заказано: ООО «Открытый институт». Используется в качестве учебного пособия для обучающихся экономического факультета.

Исходный код .py

Python
from pybit.unified_trading import HTTP
import time
import telebot
import time
from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton
import json
import requests
import json
import time

bot = telebot.TeleBot('API_TOKEN', threaded=False) 

@bot.message_handler(commands=['start'])
def start_command(message):
    
    keyboard = InlineKeyboardMarkup()
    b1 = InlineKeyboardButton(text='Получить список отслеживаемых пар', callback_data='show')
    keyboard.add(b1)
    #msg11=bot.send_message(message.chat.id, 'Добавьте пару в формате:\n\nПара\nНиз диапазона-Верх диапазона')
    msg11=bot.send_message(message.chat.id, 'Получить список отслеживаемых пар',reply_markup=[keyboard])
    #bot.register_next_step_handler(msg11, telephone)

def telephone(message):
    try:
        add_para(message)
        #bot.send_message(message.chat.id,'Пара добавлена.')
        keyboard = InlineKeyboardMarkup()
        b1 = InlineKeyboardButton(text='Получить список отслеживаемых пар', callback_data='show')
        b2 = InlineKeyboardButton(text='Добавить пару', callback_data='add')
        b3 = InlineKeyboardButton(text='Удалить пару', callback_data='delete')
        keyboard.add(b1)
        keyboard.add(b2)
        keyboard.add(b3)
        bot.send_message(message.chat.id, 'Пара добавлена.',reply_markup=[keyboard])
    except:
        bot.send_message(message.chat.id,'Ошибка! Ввести новые данные')
        start_command(message)

def telephone_1(message):
    try:
        del_para(message)
        #bot.send_message(message.chat.id,'Пара добавлена.')
        keyboard = InlineKeyboardMarkup()
        b1 = InlineKeyboardButton(text='Получить список отслеживаемых пар', callback_data='show')
        b2 = InlineKeyboardButton(text='Добавить пару', callback_data='add')
        b3 = InlineKeyboardButton(text='Удалить пару', callback_data='delete')
        keyboard.add(b1)
        keyboard.add(b2)
        keyboard.add(b3)
        bot.send_message(message.chat.id, 'Пара удалена.',reply_markup=[keyboard])
    except:
        bot.send_message(message.chat.id,'Ошибка! Ввести новые данные')
        start_command(message)

def add_para(message):
    spis=[]
    file=open('coins.txt', encoding='utf-8')
    for i in file:
        spis.append(i.strip())
    file.close()
    para=message.text.strip().split('\n')
    para=[i.strip().upper() for i in para]
    diappp=para[1].split('-')
    if(para[0].strip() not in spis):
        a=1/0
    else:

        file=open('data.txt','a', encoding='utf-8')
        file.write(str(message.chat.id)+';'+para[0].strip()+';'+para[1]+';'+'+'+'\n')
        file.close()

def del_para(message):
    spis=[]
    file=open('coins.txt', encoding='utf-8')
    for i in file:
        spis.append(i.strip())
    file.close()
    para=message.text.strip().split('\n')
    para=[i.strip().upper() for i in para]
    #diappp=para[1].split('-')
    if(para[0].strip() not in spis):
        a=1/0
    else:

        file=open('data.txt','a', encoding='utf-8')
        file.write(str(message.chat.id)+';'+para[0].strip()+';'+''+';'+'-'+'\n')
        file.close()

@bot.callback_query_handler(func=lambda call: True)
def step2(call):
    global zapom

    try:
        if call.data == 'show': 
            slova={}  
            file=open('data.txt', encoding='utf-8')
            for i in file:
                pipp=i.strip().split(';')
                if(pipp[3]=='+'):
                    if(pipp[0] not in slova):
                        slova[pipp[0]]={}
                    slova[pipp[0]][pipp[1]]=pipp[2]
                else:
                    try:
                        uuu=slova[pipp[0]].pop(pipp[1])
                    except:
                        pass
            soob=''
            sche=0
            try:
                for i in slova[str(call.message.chat.id)]:
                    sche=sche+1
                    soob=soob+str(sche)+'. '+i+'    '+slova[str(call.message.chat.id)][i]+'\n'
            except:
                pass
            if(soob==''):
                soob='Пар не найдено'
            keyboard = InlineKeyboardMarkup()
            b1 = InlineKeyboardButton(text='Добавить пару', callback_data='add')
            b2 = InlineKeyboardButton(text='Удалить пару', callback_data='delete')
            keyboard.add(b1)
            keyboard.add(b2)

            bot.send_message(call.message.chat.id, soob,reply_markup=[keyboard])
            
            #start_command(call.message)
        if call.data == 'add': 
            msg11=bot.send_message(call.message.chat.id, 'Добавьте пару в формате:\n\nПара\nНиз диапазона-Верх диапазона')            
            bot.register_next_step_handler(msg11, telephone)
        if call.data == 'delete': 
            msg11=bot.send_message(call.message.chat.id, 'Введите название пары')            
            bot.register_next_step_handler(msg11, telephone_1)
        '''
        if call.data == 'da': 
            next_step(call.message,sborik)
        if call.data == 'net': 
            start_command(call.message)
        '''
    except:
        bot.send_message(call.message.chat.id,'Ошибка! Ввести новые данные')
        start_command(call.message)
    
while(True):
    try:
        bot.polling()
    except:
        print('Error!!!!')
Python