7 Commits

Author SHA1 Message Date
f26df3b1a4 Merge pull request 'Merge pull STCS' (#2) from Pixe1lz/stcs:stable into stable
Reviewed-on: kodorvan/stcs#2
2025-07-30 14:32:49 +07:00
Kirill Strelnikov
1997b9d1c0 The message about the Bybit profile output has been corrected when clicking the "Start" button, and messages regarding the requirement to connect the platform and incorrect API entries have been added. Messages about successful and erroneous changes to user settings have been added. 2025-07-22 16:08:23 +07:00
Kirill Strelnikov
e555bfa8fb The text of the welcome message has been changed, the text of the risk management settings has been changed, the default value for "maximum_trade_risk" in the database has been changed from 1 to 100. The message upon re-clicking the "Start Trading" button has been removed. 2025-07-22 12:54:23 +07:00
Kirill Strelnikov
0fecb5dab7 Merge branch 'stable' of https://git.svoboda.works/Pixe1lz/stcs into stable 2025-07-21 16:58:38 +07:00
Kirill Strelnikov
242be34a97 fix app/telegram/handlers/handlers.py, fix app/telegram/functions/functions.py || change two buttons "Начать торговлю" || fix text registration message, fix text profile || delete app/services/Bybit/config.py || delete comments 2025-07-21 16:55:30 +07:00
Бездельник бездельников
2da3c282d1 merge upstream 2025-07-21 15:33:27 +07:00
127003ebe1 Merge pull request 'add files project' (#1) from Pixe1lz/stcs:stable into stable
Reviewed-on: kodorvan/stcs#1
2025-07-10 18:26:34 +07:00
13 changed files with 111 additions and 214 deletions

View File

@@ -21,7 +21,6 @@
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging> <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="app\services\Bybit\config.py" />
<Compile Include="app\services\Bybit\functions\Add_Bybit_API.py" /> <Compile Include="app\services\Bybit\functions\Add_Bybit_API.py" />
<Compile Include="app\services\Bybit\functions\balance.py" /> <Compile Include="app\services\Bybit\functions\balance.py" />
<Compile Include="app\services\Bybit\functions\functions.py" /> <Compile Include="app\services\Bybit\functions\functions.py" />

View File

@@ -1,9 +0,0 @@
API_KEY=''
API_SECRET=''
SYMBOL=''
'''
API_KEY = 'o5854uk3qBD4lySnjv'
SECRET_KEY = 'aMFPbs0AKyOSLTgXyrqCfREDi7byjnsOd0Kj'
SYMBOL = "SHIB1000USDT"
'''

View File

@@ -98,21 +98,6 @@ async def contract_long(tg_id, message, margin_mode):
realised_pnl = float(position['unrealisedPnl']) realised_pnl = float(position['unrealisedPnl'])
if realised_pnl > 0: if realised_pnl > 0:
print(f'''
=====================
=====Сделка=========
===уСПЕШНЕАЯ================
===================
=================
{realised_pnl}
===============
===============
=============
===============
==============
''')
starting_quantity = next_quantity starting_quantity = next_quantity
current_martingale_step = 0 current_martingale_step = 0
elif not realised_pnl: elif not realised_pnl:
@@ -122,22 +107,6 @@ async def contract_long(tg_id, message, margin_mode):
current_martingale_step += 1 current_martingale_step += 1
next_quantity = last_quantity * martingale_factor next_quantity = last_quantity * martingale_factor
starting_quantity = next_quantity starting_quantity = next_quantity
print(f'''
======СДЕЛКА===============
=====УБЫТОЧНАЯ==============
===================
===================
=================
{realised_pnl}
===============
===============
=============
===============
==============
''')
except Exception as e: except Exception as e:
print("Не получены позиции") print("Не получены позиции")
next_quantity = starting_quantity next_quantity = starting_quantity
@@ -174,22 +143,6 @@ async def contract_long(tg_id, message, margin_mode):
await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity) await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity)
print(f'''
=====================
===================
===================
===================
=================
{r}
===============
===============
=============
===============
==============
''')
except exceptions.InvalidRequestError as e: except exceptions.InvalidRequestError as e:
await message.answer('Недостаточно баланса') await message.answer('Недостаточно баланса')
except Exception as e: except Exception as e:
@@ -252,21 +205,6 @@ async def contract_short(tg_id, message, margin_mode):
realised_pnl = float(position['unrealisedPnl']) realised_pnl = float(position['unrealisedPnl'])
if realised_pnl > 0: if realised_pnl > 0:
print(f'''
=====================
=====Сделка=========
===уСПЕШНЕАЯ================
===================
=================
{realised_pnl}
===============
===============
=============
===============
==============
''')
starting_quantity = next_quantity starting_quantity = next_quantity
current_martingale_step = 0 current_martingale_step = 0
elif not realised_pnl: elif not realised_pnl:
@@ -276,22 +214,6 @@ async def contract_short(tg_id, message, margin_mode):
current_martingale_step += 1 current_martingale_step += 1
next_quantity = last_quantity * martingale_factor next_quantity = last_quantity * martingale_factor
starting_quantity = next_quantity starting_quantity = next_quantity
print(f'''
======СДЕЛКА===============
=====УБЫТОЧНАЯ==============
===================
===================
=================
{realised_pnl}
===============
===============
=============
===============
==============
''')
except Exception as e: except Exception as e:
print("Не получены позиции") print("Не получены позиции")
next_quantity = starting_quantity next_quantity = starting_quantity
@@ -326,22 +248,6 @@ async def contract_short(tg_id, message, margin_mode):
await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity) await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity)
print(f'''
=====================
===================
===================
===================
=================
{r}
===============
===============
=============
===============
==============
''')
except exceptions.InvalidRequestError as e: except exceptions.InvalidRequestError as e:
await message.answer('Недостаточно баланса') await message.answer('Недостаточно баланса')
except Exception as e: except Exception as e:

View File

@@ -13,26 +13,21 @@ async def get_balance(tg_id, message):
api_secret=secret_key api_secret=secret_key
) )
try: if api_key == 'None' or secret_key == 'None':
balance = client.get_wallet_balance(accountType='UNIFIED', coin='USDT')['result']['list'][0]['coin'][0]['walletBalance'] await message.answer('⚠️ Подключите платформу для торговли')
return 0
print(f'''
===================== try:
=====BALANCE========= check_user = client.get_wallet_balance()
======USDT=============
=================== if check_user:
================= try:
balance = client.get_wallet_balance(accountType='UNIFIED', coin='USDT')['result']['list'][0]['coin'][0]['walletBalance']
{balance}
return balance
=============== except Exception as e:
=============== await message.answer('⚠️ Ошибка при получении баланса пользователя')
============= return 0
=============== except Exception as e:
============== await message.answer('⚠️ Неверные данные API, перепроверьте их')
''')
return balance
except Exception as e:
await message.answer('Баланс не был получен')
return 0 return 0

View File

@@ -18,20 +18,4 @@ async def get_min_qty(tg_id, message):
price = await price_s.get_price(tg_id, message) price = await price_s.get_price(tg_id, message)
min_qty = int(5 / price * 1.1) min_qty = int(5 / price * 1.1)
print(f'''
=====================
=====MIN=========
=====QTY==============
===================
=================
{min_qty}
===============
===============
=============
===============
==============
''')
return min_qty return min_qty

View File

@@ -20,9 +20,9 @@ class state_update_symbol(StatesGroup):
async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMContext): async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMContext):
api = await rq.get_bybit_api_key(callback.from_user.id) api = await rq.get_bybit_api_key(callback.from_user.id)
secret = await rq.get_bybit_secret_key(callback.from_user.id) secret = await rq.get_bybit_secret_key(callback.from_user.id)
balance = await get_balance(callback.from_user.id, callback.message)
if api and secret: if balance:
balance = await get_balance(callback.from_user.id, callback.message)
symbol = await rq.get_symbol(callback.from_user.id) symbol = await rq.get_symbol(callback.from_user.id)
text = f'''💎 Торговля на Bybit text = f'''💎 Торговля на Bybit
@@ -30,38 +30,33 @@ async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMConte
⚖️ Ваш баланс (USDT): {balance} ⚖️ Ваш баланс (USDT): {balance}
📊 Текущая торговая пара: {symbol} 📊 Текущая торговая пара: {symbol}
---
Как начать торговлю? Как начать торговлю?
1⃣ Проверьте и тщательно настройте все параметры в вашем профиле. 1⃣ Проверьте и тщательно настройте все параметры в вашем профиле.
2⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT). 2⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT).
''' '''
await callback.message.edit_text(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup) await callback.message.edit_text(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup)
else:
callback.message.answer('Перед началом работы, в настройках подключите bybit')
async def start_bybit_trade_message(message, state): async def start_bybit_trade_message(message, state):
api = await rq.get_bybit_api_key(message.from_user.id) api = await rq.get_bybit_api_key(message.from_user.id)
secret = await rq.get_bybit_secret_key(message.from_user.id) secret = await rq.get_bybit_secret_key(message.from_user.id)
balance = await get_balance(message.from_user.id, message)
if api and secret: if balance:
balance = await get_balance(message.from_user.id, message)
symbol = await rq.get_symbol(message.from_user.id) symbol = await rq.get_symbol(message.from_user.id)
text = f'''Торговля на Bybit text = f'''💎 Торговля на Bybit
<b>ваш баланс (USDT):</b> {balance} ⚖️ Ваш баланс (USDT): {balance}
<b>Текущая торговая пара: </b> {symbol} 📊 Текущая торговая пара: {symbol}
Как начать торговлю? Как начать торговлю?
1. Внимательно проверьте и настройте все параметры в вашем профиле
2. Ниже нажмите 'Указать торговую пару' и отправьте торговую пару заглавными буквами, указав два актива без всяких лишних символов! (Пример: BTCUSDT) 1⃣ Проверьте и тщательно настройте все параметры в вашем профиле.
2⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT).
''' '''
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup) await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup)
else:
await message.answer('Перед началом работы, в настройках подключите bybit')
@router_functions_bybit_trade.callback_query(F.data == 'clb_update_trading_pair') @router_functions_bybit_trade.callback_query(F.data == 'clb_update_trading_pair')
async def update_symbol_for_trade_message(callback: CallbackQuery, state: FSMContext): async def update_symbol_for_trade_message(callback: CallbackQuery, state: FSMContext):
@@ -75,6 +70,7 @@ async def update_symbol_for_trade(message: Message, state: FSMContext):
data = await state.get_data() data = await state.get_data()
await message.answer('Пара была успешно обновлена')
await rq.update_symbol(message.from_user.id, data['symbol']) await rq.update_symbol(message.from_user.id, data['symbol'])
await start_bybit_trade_message(message, state) await start_bybit_trade_message(message, state)
@@ -94,10 +90,8 @@ async def make_deal_bybit (callback: CallbackQuery):
else: else:
match trade_mode: match trade_mode:
case 'Long': case 'Long':
print('====================================LONG=========================================')
await Futures.contract_long(callback.from_user.id, callback.message, margin_mode) await Futures.contract_long(callback.from_user.id, callback.message, margin_mode)
case 'Short': case 'Short':
print('====================================SHORT=========================================')
await Futures.contract_short(callback.from_user.id, callback.message, margin_mode) await Futures.contract_short(callback.from_user.id, callback.message, margin_mode)
case 'Switch': case 'Switch':
await callback.message.edit_text('Режим Switch пока недоступен') await callback.message.edit_text('Режим Switch пока недоступен')

View File

@@ -18,22 +18,6 @@ async def get_price(tg_id, message):
try: try:
price = float(client.get_tickers(category='linear', symbol=SYMBOL).get('result').get('list')[0].get('ask1Price')) price = float(client.get_tickers(category='linear', symbol=SYMBOL).get('result').get('list')[0].get('ask1Price'))
print(f'''
=====================
=====PRICE=========
===================
===================
=================
{price}
===============
===============
=============
===============
==============
''')
return price return price
except exceptions.InvalidRequestError as e: except exceptions.InvalidRequestError as e:
await message.answer('Неверно указана торговая пара') await message.answer('Неверно указана торговая пара')

View File

@@ -1,15 +1,15 @@
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
start_markup = InlineKeyboardMarkup(inline_keyboard=[ start_markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Торговать", callback_data="callback_profile")] [InlineKeyboardButton(text="🔥 Начать торговлю", callback_data="clb_start_chatbot_message")]
]) ])
settings_markup = InlineKeyboardMarkup(inline_keyboard=[ settings_markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Настройки", callback_data='clb_settings_message')], [InlineKeyboardButton(text="Настройки", callback_data='clb_settings_message')],
[InlineKeyboardButton(text="Начать торговлю", callback_data='clb_start_trading')] [InlineKeyboardButton(text="Запуск", callback_data='clb_start_trading')]
]) ])
back_btn_profile = [InlineKeyboardButton(text="Назад", callback_data='callback_profile')] back_btn_profile = [InlineKeyboardButton(text="Назад", callback_data='clb_start_chatbot_message')]
special_settings_markup = InlineKeyboardMarkup(inline_keyboard=[ special_settings_markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Основные настройки", callback_data='clb_change_main_settings'), [InlineKeyboardButton(text="Основные настройки", callback_data='clb_change_main_settings'),

View File

@@ -84,7 +84,7 @@ class User_Risk_Management_Settings(Base):
price_profit = mapped_column(Integer(), default=1) price_profit = mapped_column(Integer(), default=1)
price_loss = mapped_column(Integer(), default=1) price_loss = mapped_column(Integer(), default=1)
max_risk_deal = mapped_column(Integer(), default=1) max_risk_deal = mapped_column(Integer(), default=100)
class User_Condition_Settings(Base): class User_Condition_Settings(Base):
__tablename__ = 'user_condition_settings' __tablename__ = 'user_condition_settings'

View File

@@ -2,35 +2,29 @@
import app.telegram.Keyboards.reply_keyboards as reply_markup import app.telegram.Keyboards.reply_keyboards as reply_markup
async def start_message(message): async def start_message(message):
await message.answer(f""" Привет <b>{message.from_user.username}</b>! 👋 username = ''
Добро пожаловать в бот по трейдингу на Bibyt — вашего надежного помощника для анализа рынка и принятия взвешенных решений. Здесь вы получите: if message.from_user.first_name == None:
<b> username = message.from_user.last_name
📊 Анализ текущих трендов elif message.from_user.last_name == None:
📈 Инструменты для прогнозирования и оценки рисков username = message.from_user.first_name
⚡️ Сигналы и рекомендации по сделкам else:
🔔 Уведомления о важных изменениях и новостях username = f'{message.from_user.first_name} {message.from_user.last_name}'
</b> await message.answer(f""" Привет <b>{username}</b>! 👋
Просто отправляйте интересующий вас инструмент или команду, и бот быстро предоставит актуальную информацию и аналитику.
Начнем торговать умно и эффективно вместе! 🚀
Добро пожаловать в чат-робот для автоматизации трейдинга — вашего надежного помощника для анализа рынка и принятия взвешенных решений.
""", parse_mode='html', reply_markup=inline_markup.start_markup) """, parse_mode='html', reply_markup=inline_markup.start_markup)
async def profile_message(username, message): async def profile_message(username, message):
await message.answer(f""" <b>{username}</b> await message.answer(f""" <b>@{username}</b>
Баланс Баланс
⭐️ 0 ⭐️ 0
О себе
🚀 Профессиональный трейдер на платформе Bibyt с авторской стратегией и аналитикой в реальном времени.
📊 Постоянно улучшаю навыки и адаптируюсь к рыночным изменениям, чтобы максимально увеличить прибыль.
🔥 Всегда в поиске новых возможностей для роста и стабильного успеха!
""", parse_mode='html', reply_markup=inline_markup.settings_markup) """, parse_mode='html', reply_markup=inline_markup.settings_markup)
async def check_profile_message(message): async def check_profile_message(message, username):
await message.answer(f'Добро пожаловать {message.from_user.username}!', reply_markup=reply_markup.base_buttons_markup) await message.answer(f'С возвращением, {username}!', reply_markup=reply_markup.base_buttons_markup)
async def settings_message(message): async def settings_message(message):
await message.edit_text("Выберите что настроить", reply_markup=inline_markup.special_settings_markup) await message.edit_text("Выберите что настроить", reply_markup=inline_markup.special_settings_markup)

View File

@@ -62,29 +62,34 @@ async def state_trading_mode(callback: CallbackQuery, state):
await callback.answer() await callback.answer()
id = callback.from_user.id id = callback.from_user.id
data_settings = await rq.get_user_main_settings(id)
try: try:
match callback.data: match callback.data:
case 'trade_mode_long': case 'trade_mode_long':
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Long")
await rq.update_trade_mode_user(id, 'Long') await rq.update_trade_mode_user(id, 'Long')
await main_settings_message(id, callback.message, state) await main_settings_message(id, callback.message, state)
await state.clear() await state.clear()
case 'trade_mode_short': case 'trade_mode_short':
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Short")
await rq.update_trade_mode_user(id, 'Short') await rq.update_trade_mode_user(id, 'Short')
await main_settings_message(id, callback.message, state) await main_settings_message(id, callback.message, state)
await state.clear() await state.clear()
case 'trade_mode_switch': case 'trade_mode_switch':
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Switch")
await rq.update_trade_mode_user(id, 'Switch') await rq.update_trade_mode_user(id, 'Switch')
await main_settings_message(id, callback.message, state) await main_settings_message(id, callback.message, state)
await state.clear() await state.clear()
case 'trade_mode_smart': case 'trade_mode_smart':
await rq.update_trade_mode_user(id, 'Smart') await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']}Smart")
await main_settings_message(id, callback.message, state) await rq.update_trade_mode_user(id, 'Smart')
await main_settings_message(id, callback.message, state)
await state.clear() await state.clear()
except Exception as e: except Exception as e:
print(f"error: {e}") print(f"error: {e}")
@@ -98,13 +103,18 @@ async def state_size_leverage(message: Message, state):
await state.update_data(size_leverage = message.text) await state.update_data(size_leverage = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_main_settings(message.from_user.id)
if data['size_leverage'].isdigit() and int(data['size_leverage']) <= 100: if data['size_leverage'].isdigit() and int(data['size_leverage']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['size_leverage']}{data['size_leverage']}")
await rq.update_size_leverange(message.from_user.id, data['size_leverage']) await rq.update_size_leverange(message.from_user.id, data['size_leverage'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['size_leverage']}) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
async def martingale_factor_message(message, state): async def martingale_factor_message(message, state):
@@ -117,13 +127,18 @@ async def state_martingale_factor(message: Message, state):
await state.update_data(martingale_factor = message.text) await state.update_data(martingale_factor = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_main_settings(message.from_user.id)
if data['martingale_factor'].isdigit() and int(data['martingale_factor']) <= 100: if data['martingale_factor'].isdigit() and int(data['martingale_factor']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['martingale_factor']}{data['martingale_factor']}")
await rq.update_martingale_factor(message.from_user.id, data['martingale_factor']) await rq.update_martingale_factor(message.from_user.id, data['martingale_factor'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['martingale_factor']}) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
async def margin_type_message(message, state): async def margin_type_message(message, state):
@@ -150,16 +165,20 @@ async def state_margin_type(callback: CallbackQuery, state):
await callback.answer() await callback.answer()
id = callback.from_user.id id = callback.from_user.id
print(f"sdljfngdjklfg ## {callback.data}") data_settings = await rq.get_user_main_settings(id)
try: try:
match callback.data: match callback.data:
case 'margin_type_isolated': case 'margin_type_isolated':
await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Isolated")
await rq.update_margin_type(id, 'Isolated') await rq.update_margin_type(id, 'Isolated')
await main_settings_message(id, callback.message, state) await main_settings_message(id, callback.message, state)
await state.clear() await state.clear()
case 'margin_type_cross': case 'margin_type_cross':
await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Cross")
await rq.update_margin_type(id, 'Cross') await rq.update_margin_type(id, 'Cross')
await main_settings_message(id, callback.message, state) await main_settings_message(id, callback.message, state)
@@ -177,30 +196,40 @@ async def state_starting_quantity(message: Message, state):
await state.update_data(starting_quantity = message.text) await state.update_data(starting_quantity = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_main_settings(message.from_user.id)
if data['starting_quantity'].isdigit(): if data['starting_quantity'].isdigit():
await message.answer(f"✅ Изменено: {data_settings['starting_quantity']}{data['starting_quantity']}")
await rq.update_starting_quantity(message.from_user.id, data['starting_quantity']) await rq.update_starting_quantity(message.from_user.id, data['starting_quantity'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
async def maximum_quantity_message(message, state): async def maximum_quantity_message(message, state):
await state.set_state(update_main_settings.maximal_quantity) await state.set_state(update_main_settings.maximal_quantity)
await message.edit_text("Введите <b>максимальное количество ставок:</b>", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup) await message.edit_text("Введите <b>максимальное количество серии ставок:</b>", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
@router_main_settings.message(update_main_settings.maximal_quantity) @router_main_settings.message(update_main_settings.maximal_quantity)
async def state_maximal_quantity(message: Message, state): async def state_maximal_quantity(message: Message, state):
await state.update_data(maximal_quantity = message.text) await state.update_data(maximal_quantity = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_main_settings(message.from_user.id)
if data['maximal_quantity'].isdigit() and int(data['maximal_quantity']) <= 100: if data['maximal_quantity'].isdigit() and int(data['maximal_quantity']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['maximal_quantity']}{data['maximal_quantity']}")
await rq.update_maximal_quantity(message.from_user.id, data['maximal_quantity']) await rq.update_maximal_quantity(message.from_user.id, data['maximal_quantity'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['maximal_quantity']}) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)

View File

@@ -25,9 +25,9 @@ async def main_settings_message(id, message, state):
text = f"""<b>Риск менеджмент</b>, text = f"""<b>Риск менеджмент</b>,
<b>- Процент изменения цены для фиксации прибыли:</b> {data['price_profit']} <b>- Процент изменения цены для фиксации прибыли:</b> {data['price_profit']}%
<b>- Процент изменения цены для фиксации убытков:</b> {data['price_loss']} <b>- Процент изменения цены для фиксации убытков:</b> {data['price_loss']}%
<b>- Максимальный риск на сделку (в % от баланса):</b> {data['max_risk_deal']} <b>- Максимальный риск на сделку (в % от баланса):</b> {data['max_risk_deal']}%
""" """
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup) await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup)
@@ -43,13 +43,18 @@ async def state_price_profit(message: Message, state):
await state.update_data(price_profit = message.text) await state.update_data(price_profit = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
if data['price_profit'].isdigit() and int(data['price_profit']) <= 100: if data['price_profit'].isdigit() and int(data['price_profit']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['price_profit']}% → {data['price_profit']}%")
await rq.update_price_profit(message.from_user.id, data['price_profit']) await rq.update_price_profit(message.from_user.id, data['price_profit'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_profit']}%) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
async def price_loss_message(message, state): async def price_loss_message(message, state):
@@ -64,13 +69,18 @@ async def state_price_loss(message: Message, state):
await state.update_data(price_loss = message.text) await state.update_data(price_loss = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
if data['price_loss'].isdigit() and int(data['price_loss']) <= 100: if data['price_loss'].isdigit() and int(data['price_loss']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['price_loss']}% → {data['price_loss']}%")
await rq.update_price_loss(message.from_user.id, data['price_loss']) await rq.update_price_loss(message.from_user.id, data['price_loss'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_loss']}%) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
async def max_risk_deal_message(message, state): async def max_risk_deal_message(message, state):
@@ -85,11 +95,16 @@ async def state_max_risk_deal(message: Message, state):
await state.update_data(max_risk_deal = message.text) await state.update_data(max_risk_deal = message.text)
data = await state.get_data() data = await state.get_data()
data_settings = await rq.get_user_risk_management_settings(message.from_user.id)
if data['max_risk_deal'].isdigit() and int(data['max_risk_deal']) <= 100: if data['max_risk_deal'].isdigit() and int(data['max_risk_deal']) <= 100:
await message.answer(f"✅ Изменено: {data_settings['max_risk_deal']}% → {data['max_risk_deal']}%")
await rq.update_max_risk_deal(message.from_user.id, data['max_risk_deal']) await rq.update_max_risk_deal(message.from_user.id, data['max_risk_deal'])
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)
await state.clear() await state.clear()
else: else:
await message.answer(f'⛔️ Ошибка: ваше значение ({data['max_risk_deal']}%) или выше лимита (100) или вы вводите неверные символы')
await main_settings_message(message.from_user.id, message, state) await main_settings_message(message.from_user.id, message, state)

View File

@@ -20,7 +20,6 @@ router = Router()
@router.message(CommandStart()) @router.message(CommandStart())
async def start_message(message: Message): async def start_message(message: Message):
await rq.set_new_user_bybit_api(message.from_user.id) await rq.set_new_user_bybit_api(message.from_user.id)
await func.start_message(message) await func.start_message(message)
@router.message(F.text == "👤 Профиль") @router.message(F.text == "👤 Профиль")
@@ -37,13 +36,20 @@ async def settings_msg(message: Message):
if user: if user:
await func.settings_message(message) await func.settings_message(message)
@router.callback_query(F.data == "callback_profile") @router.callback_query(F.data == "clb_start_chatbot_message")
async def clb_func_reg (callback: CallbackQuery): async def clb_profile_msg (callback: CallbackQuery):
user = await rq.check_user(callback.from_user.id) user = await rq.check_user(callback.from_user.id)
if user: username = ''
await callback.message.answer(f'С возвращением, {callback.from_user.username}!', reply_markup=reply_markup.base_buttons_markup)
if callback.from_user.first_name == None:
username = callback.from_user.last_name
elif callback.from_user.last_name == None:
username = callback.from_user.first_name
else:
username = f'{callback.from_user.first_name} {callback.from_user.last_name}'
if user:
await func.profile_message(callback.from_user.username, callback.message) await func.profile_message(callback.from_user.username, callback.message)
else: else:
await rq.save_tg_id_new_user(callback.from_user.id) await rq.save_tg_id_new_user(callback.from_user.id)
@@ -53,9 +59,9 @@ async def clb_func_reg (callback: CallbackQuery):
await func_condition_settings.reg_new_user_default_condition_settings(callback.from_user.id, callback.message) await func_condition_settings.reg_new_user_default_condition_settings(callback.from_user.id, callback.message)
await func_additional_settings.reg_new_user_default_additional_settings(callback.from_user.id, callback.message) await func_additional_settings.reg_new_user_default_additional_settings(callback.from_user.id, callback.message)
await callback.message.answer(f'Регистрация прошла успешно, здравствуйте {callback.from_user.username}!', reply_markup=reply_markup.base_buttons_markup) await callback.message.answer(f'Здравствуйте, {username}!', reply_markup=reply_markup.base_buttons_markup)
await func.profile_message(callback.from_user.username, callback.message) await func.profile_message(username, callback.message)
await callback.answer() await callback.answer()