create app

This commit is contained in:
2022-08-16 10:47:36 +03:00
parent aeb45c9d7d
commit 585b9b221d
4 changed files with 57 additions and 23 deletions

View File

@@ -40,24 +40,6 @@ def get_keyboard() -> types.InlineKeyboardMarkup:
return markup
@dispatcher.message_handler(commands=['command1'])
async def send_message_1(message: types.Message) -> None:
logger.info("command 1 started")
await asyncio.sleep(15)
await bot.send_message(message.chat.id, 'message 1 on screen')
logger.info('command 1 ends')
@dispatcher.message_handler(commands=['command2'])
async def send_message_2(message: types.Message) -> None:
logger.info("command 2 started")
await asyncio.sleep(15)
await bot.send_message(message.chat.id, 'message 2 on screen')
logger.info('command 2 ends')
@dispatcher.callback_query_handler(stations_cb.filter(direction='home->office'))
async def home_office(
query: types.CallbackQuery, callback_data: dict[str, str]
@@ -89,7 +71,7 @@ async def office_home(
@dispatcher.message_handler(commands=['chatid'])
async def chat_id(message: types.Message) -> SendMessage:
logger.info('Hello World')
return SendMessage(message.chat.id, message.chat.id)

82
app/main.py Normal file
View File

@@ -0,0 +1,82 @@
from http import HTTPStatus
from aiogram import Bot, Dispatcher
from aiogram.types import Update
from aiogram.utils.executor import start_polling, start_webhook
from aiohttp import web
from app.core.bot import bot, dispatcher
from app.core.logger import logger
from app.core.scheduler import asyncio_schedule
from app.settings import (
START_WITH_WEBHOOK,
WEBAPP_HOST,
WEBAPP_PORT,
WEBHOOK_PATH,
WEBHOOK_URL,
)
async def on_startup(dp: Dispatcher) -> None:
await bot.set_webhook(WEBHOOK_URL)
asyncio_schedule()
async def on_shutdown(dp: Dispatcher) -> None:
logger.warning('Shutting down..')
# Remove webhook (not acceptable in some cases)
await bot.delete_webhook()
# Close DB connection (if used)
await dp.storage.close()
await dp.storage.wait_closed()
logger.warning('Bye!')
def bot_polling() -> None:
logger.info("Start bot in polling mode")
start_polling(
dispatcher=dispatcher,
skip_updates=True,
on_startup=on_startup,
on_shutdown=on_shutdown,
)
def bot_webhook() -> None:
logger.info("Start bot with webhook")
start_webhook(
dispatcher=dispatcher,
webhook_path=WEBHOOK_PATH,
on_startup=on_startup,
on_shutdown=on_shutdown,
skip_updates=True,
host=WEBAPP_HOST,
port=WEBAPP_PORT,
)
async def index(request: web.Request) -> web.Response:
data = await request.json()
Bot.set_current(dispatcher.bot)
Dispatcher.set_current(dispatcher)
tg_update = Update(**data)
await dispatcher.process_update(tg_update)
return web.Response(status=HTTPStatus.OK)
async def create_app() -> web.Application:
app = web.Application()
app.router.add_post('/', index)
return app
if __name__ == '__main__':
if START_WITH_WEBHOOK:
bot_webhook()
else:
# bot_polling() # type: ignore
app = create_app()
web.run_app(app=app, host='localhost', port=8084)

View File

@@ -23,7 +23,7 @@ WEBHOOK_PATH = config('WEBHOOK_PATH', default='')
WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}"
# webserver settings
WEBAPP_HOST = config('WEBAPP_HOST', default='') # or ip
WEBAPP_PORT = config('WEBAPP_PORT', cast=int, default=0)
WEBAPP_HOST = config('WEBAPP_HOST', default='localhost') # or ip
WEBAPP_PORT = config('WEBAPP_PORT', cast=int, default=8084)
START_WITH_WEBHOOK = config('START_WITH_WEBHOOK', cast=bool, default=False)