diff --git a/.gitignore b/.gitignore
index 0c9dcc5..bf9387f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
-venv
+.venv
+src/__pycache__
src/test.py
src/credentials.py
diff --git a/src/main.py b/src/main.py
index 08b00ec..2a6fefa 100644
--- a/src/main.py
+++ b/src/main.py
@@ -7,15 +7,49 @@ from aiogram.types import Message
from aiogram.client.default import DefaultBotProperties
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 options
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)
- time.sleep(5)
- print('cute')
+ await time.sleep(5)
+ print('Test succes')
+ result = pair + '\n' + params
+ return result
# Telegram
@@ -25,43 +59,71 @@ async def strategy(params):
# Нижняя граница ордеров
# Верхняя граница для брейка
# Нижняя граница для брейка
+# Количество уровней сетки
# Шаг сетки
# Дельта для тейка
# Дельта для стопа
# Размер позиции на каждом уровне
-dp = Dispatcher()
+class Form(StatesGroup):
+ pair = State()
+ params = State()
+
+
+dp = Dispatcher(storage=MemoryStorage())
bot = Bot(
token=credentials.bot_token,
default=DefaultBotProperties(parse_mode=ParseMode.HTML),
)
+strategy_router = Router()
-# async def sendMessage(text):
- # await bot.send_message(text, )
@dp.message(Command("start"))
async def commandStart(message: Message) -> None:
- # chat_id = message.from_user.id
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"))
async def commandHelp(message: Message) -> None:
await message.answer(strings.helpCommand)
-@dp.message()
-async def getParams(message: Message) -> None:
- params = message.text
- await message.answer(strings.gotParams + '\n' + strings.startStrategy)
- await strategy(params)
+
+@strategy_router.message(Command("strategy"))
+async def commandStrategy(message: Message, state: FSMContext):
+ print("F command strategy + capture pair")
+ 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'Вы запускаете стратегию на паре {data.get("pair")} с данными параметрами\n{data.get("params")}\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
async def main() -> None:
+ dp.include_router(strategy_router)
await dp.start_polling(bot)
if __name__ == "__main__":
diff --git a/src/strings.py b/src/strings.py
index d19d40f..952f506 100644
--- a/src/strings.py
+++ b/src/strings.py
@@ -5,16 +5,37 @@ startStrategy = "Стратегия запущена!"
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 = "Параметры заданы!"