Path: blob/master/ invest-robot-contest_trading_bot-master/bot/handlers/search_handlers.py
5935 views
from main import dp, bot1from aiogram.types import Message2from aiogram.dispatcher import FSMContext3from aiogram.dispatcher.filters.state import State, StatesGroup4from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton5from trading.get_securities import get_security_list6from trading.place_order import buy_order7from trading.trade_help import get_price_figi, get_currency_sing8from config.personal_data import get_account_access910"""1112Тут представлены все хэндлеры, которые отвечают за поиск бумаг1314"""1516"""17Создаём состояние ожидания названия18"""192021class SearchSFB(StatesGroup):22wait_sfb = State()232425"""26Хэндлер, который запускает состояние поиска27"""282930@dp.message_handler(text="Поиск")31async def search_start(callback_query):32await bot.send_message(chat_id=callback_query.from_user.id, text="Введите название бумаги или FIGI:")33await SearchSFB.wait_sfb.set()343536"""37Ждём название или FIGI и выводим информацию по бумаге38"""394041@dp.message_handler(state=SearchSFB.wait_sfb)42async def search_finish(message: Message, state: FSMContext):43security_list = get_security_list(user_id=message.from_user.id, name=message.text)44if len(security_list) != 0:45for security in security_list:4647choose_share_keyboard = InlineKeyboardMarkup()48choose_share_keyboard.add(49InlineKeyboardButton(text=f"Анализ",50callback_data=f"str1:stat:show:{message.from_user.id}:{security.figi}"))51if get_account_access(user_id=message.from_user.id) == 1:52choose_share_keyboard.add(53InlineKeyboardButton(text=f"Купить 1 лот", callback_data=f"sfb:buy_now:{security.figi}"))5455try:56inst_type = security.instrument_type5758if inst_type == "share":59inst = "Акции"60elif inst_type == "future":61inst = "Фьючерсы"62elif inst_type == "bond":63inst = "Бонды"64elif inst_type == "etf":65inst = "ETF"66elif inst_type == "currency":67inst = "Валюта"68else:69inst = inst_type7071except:72inst = "Акции"7374await message.answer(75text=76f"🧾<b>{inst} {security.name}</b>\n"77f"FIGI: {security.figi}\n\n"78f"Бумаг в лоте: {security.lot}\n"79f"Средняя цена бумаги: {round(get_price_figi(user_id=message.from_user.id, figi=security.figi), 4)}{get_currency_sing(security.currency)}\n"80f"Итого стоимость: {round(security.lot * get_price_figi(user_id=message.from_user.id, figi=security.figi), 4)}{get_currency_sing(security.currency)}\n"81, reply_markup=choose_share_keyboard)8283await state.finish()84else:85await bot.send_message(chat_id=message.from_user.id, text=f"Такой бумаги нет!")86await bot.send_message(chat_id=message.from_user.id, text=f"Повторите ввод или напишите 'Отмена':")87return 0888990"""9192Бумаги9394"""959697@dp.callback_query_handler(lambda c: c.data and c.data.startswith('sfb:buy_now:'))98async def search_buy_now(callback_query):99data = callback_query.data.split(":")100figi = data[2]101102order = buy_order(figi=figi, user_id=callback_query.from_user.id, quantity_lots=1, price=0.0, via="bot")103104if order:105await bot.send_message(chat_id=callback_query.from_user.id, text=f"Покупка успешно выполнена!")106else:107await bot.send_message(chat_id=callback_query.from_user.id, text="Ошибка! Вероятно, у Вас мало средств на счёте!")108109110111