FSM and help

This commit is contained in:
2025-04-17 17:43:11 +03:00
parent 1cdd7767ca
commit af240b9acb
3 changed files with 107 additions and 23 deletions

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
venv .venv
src/__pycache__
src/test.py src/test.py
src/credentials.py src/credentials.py

View File

@ -7,15 +7,49 @@ from aiogram.types import Message
from aiogram.client.default import DefaultBotProperties from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode from aiogram.enums import ParseMode
from aiogram.fsm.context import FSMContext
from aiogram import Router, F
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.utils.chat_action import ChatActionSender
import credentials import credentials
import options import options
import strings import strings
async def strategy(params): # Custom types and vars
paramsLines = ['highEnd',
'lowEnd',
'highBreak',
'lowBreak',
'netLevelsAmount',
'netStep',
'takeDelta',
'stopDelta',
'orderSize'
]
# Custom
async def parseParams(params: str):
paramsList = params.split()
paramsDict = {}
for i in range(len(paramsLines)):
paramsDict(paramsLines[i]) = paramsList[i]
return paramsDict
# Bybit
async def strategy(pair, params):
print(params) print(params)
time.sleep(5) await time.sleep(5)
print('cute') print('Test succes')
result = pair + '\n' + params
return result
# Telegram # Telegram
@ -25,43 +59,71 @@ async def strategy(params):
# Нижняя граница ордеров # Нижняя граница ордеров
# Верхняя граница для брейка # Верхняя граница для брейка
# Нижняя граница для брейка # Нижняя граница для брейка
# Количество уровней сетки
# Шаг сетки # Шаг сетки
# Дельта для тейка # Дельта для тейка
# Дельта для стопа # Дельта для стопа
# Размер позиции на каждом уровне # Размер позиции на каждом уровне
dp = Dispatcher() class Form(StatesGroup):
pair = State()
params = State()
dp = Dispatcher(storage=MemoryStorage())
bot = Bot( bot = Bot(
token=credentials.bot_token, token=credentials.bot_token,
default=DefaultBotProperties(parse_mode=ParseMode.HTML), default=DefaultBotProperties(parse_mode=ParseMode.HTML),
) )
strategy_router = Router()
# async def sendMessage(text):
# await bot.send_message(text, )
@dp.message(Command("start")) @dp.message(Command("start"))
async def commandStart(message: Message) -> None: async def commandStart(message: Message) -> None:
# chat_id = message.from_user.id
await message.answer(strings.startCommand) await message.answer(strings.startCommand)
@dp.message(Command("stop"))
async def commandStop(message: Message) -> None:
await message.answer(strings.stopCommand + '\n' + strings.stopStrategy)
@dp.message(Command("help")) @dp.message(Command("help"))
async def commandHelp(message: Message) -> None: async def commandHelp(message: Message) -> None:
await message.answer(strings.helpCommand) await message.answer(strings.helpCommand)
@dp.message()
async def getParams(message: Message) -> None: @strategy_router.message(Command("strategy"))
params = message.text async def commandStrategy(message: Message, state: FSMContext):
await message.answer(strings.gotParams + '\n' + strings.startStrategy) print("F command strategy + capture pair")
await strategy(params) async with ChatActionSender.typing(bot=bot, chat_id=message.chat.id):
await asyncio.sleep(1)
await message.answer(strings.strategyCommand + '\n' + strings.askPair)
await state.set_state(Form.pair)
@strategy_router.message(F.text, Form.pair)
async def capture_pair(message: Message, state: FSMContext):
print("F capture pair + capture params")
await state.update_data(pair=message.text)
async with ChatActionSender.typing(bot=bot, chat_id=message.chat.id):
await asyncio.sleep(1)
await message.answer(strings.askParams)
await state.set_state(Form.params)
@strategy_router.message(F.text, Form.params)
async def capture_params(message: Message, state: FSMContext):
print("F capture params + end")
await state.update_data(params=message.text)
data = await state.get_data()
t = await strategy(pair=data.get("pair"), params=data.get("params"))
msg_text = (f'Вы запускаете стратегию на паре <b>{data.get("pair")}</b> с данными параметрами\n<b>{data.get("params")}</b>\n')
await message.answer(msg_text)
await state.clear()
@dp.message(Command("stop"))
async def commandStop(message: Message) -> None:
await message.answer(strings.stopCommand + '\n' + strings.stopStrategy)
# Main # Main
async def main() -> None: async def main() -> None:
dp.include_router(strategy_router)
await dp.start_polling(bot) await dp.start_polling(bot)
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -5,16 +5,37 @@ startStrategy = "Стратегия запущена!"
stopStrategy = "Стратегия остановлена!" stopStrategy = "Стратегия остановлена!"
# Telegram # Bot Statuses
startBot = "Бот запущен" startBot = "Бот запущен!"
stopBot = "Бот остановлен" stopBot = "Бот остановлен!"
startCommand = "Введите параметры:"
stopCommand = "" # Commands
helpCommand = "При старте стратегии требуется задать параметры в следующем формате:\nбудет расписано в последующих версиях" startCommand = "Привет! Это приватный бот для полуавтоматической торговли криптовалютой. Хороших позиций!"
stopCommand = "Стратегия остановлена!"
helpCommand = "При старте стратегии требуется задать параметры в следующем формате:\n" \
"Верхняя граница ордеров\n" \
"Нижняя граница ордеров\n" \
"Верхняя граница для брейка\n" \
"Нижняя граница для брейка\n" \
"Количество уровней сетки\n" \
"Шаг сетки\n" \
"Дельта для тейка\n" \
"Дельта для стопа\n" \
"Размер позиции на каждом уровне"
strategyCommand = "Вы собираетесь запустить стратегию."
# Route status
askPair = "Введите монетную пару:"
askParams = "Введите параметры:"
gotParams = "Параметры заданы!" gotParams = "Параметры заданы!"