forked from kodorvan/stcs
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import asyncio
|
||
import logging.config
|
||
from aiogram import Bot, Dispatcher
|
||
import app.services.Bybit.functions.bybit_ws as bybit_ws
|
||
import app.telegram.database.requests as rq
|
||
from app.telegram.database.models import async_main
|
||
from app.telegram.handlers.handlers import router
|
||
from app.telegram.functions.main_settings.settings import router_main_settings
|
||
from app.telegram.functions.risk_management_settings.settings import router_risk_management_settings
|
||
from app.telegram.functions.condition_settings.settings import condition_settings_router
|
||
from app.services.Bybit.functions.Add_Bybit_API import router_register_bybit_api
|
||
from app.services.Bybit.functions.functions import router_functions_bybit_trade
|
||
|
||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||
from config import TOKEN_TG_BOT_1
|
||
|
||
logging.config.dictConfig(LOGGING_CONFIG)
|
||
logger = logging.getLogger("main")
|
||
|
||
bot = Bot(token=TOKEN_TG_BOT_1)
|
||
dp = Dispatcher()
|
||
|
||
|
||
def get_or_create_event_loop() -> asyncio.AbstractEventLoop:
|
||
"""
|
||
Возвращает текущий активный цикл событий asyncio или создает новый, если его нет.
|
||
"""
|
||
try:
|
||
return asyncio.get_running_loop()
|
||
except RuntimeError:
|
||
loop = asyncio.new_event_loop()
|
||
asyncio.set_event_loop(loop)
|
||
return loop
|
||
|
||
|
||
loop = get_or_create_event_loop()
|
||
bybit_ws.set_event_loop(loop)
|
||
|
||
|
||
async def run_ws_for_user(tg_id, message) -> None:
|
||
"""
|
||
Запускает WebSocket Bybit для пользователя с указанным tg_id.
|
||
"""
|
||
|
||
api_key = await rq.get_bybit_api_key(tg_id)
|
||
api_secret = await rq.get_bybit_secret_key(tg_id)
|
||
|
||
await bybit_ws.start_execution_ws(api_key, api_secret, message)
|
||
|
||
|
||
async def main() -> None:
|
||
"""
|
||
Основная асинхронная функция запуска бота:
|
||
"""
|
||
|
||
await async_main()
|
||
|
||
dp.include_router(router)
|
||
dp.include_router(router_main_settings)
|
||
dp.include_router(router_risk_management_settings)
|
||
dp.include_router(condition_settings_router)
|
||
dp.include_router(router_register_bybit_api)
|
||
dp.include_router(router_functions_bybit_trade)
|
||
|
||
await dp.start_polling(bot)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
try:
|
||
logger.info("Bot is on")
|
||
asyncio.run(main())
|
||
except KeyboardInterrupt:
|
||
logger.info("Bot is off")
|