-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
59 lines (49 loc) · 1.86 KB
/
main.py
File metadata and controls
59 lines (49 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import asyncio
import logging
from urllib.parse import urljoin
import uvicorn
from django.conf import settings
from django.core.asgi import get_asgi_application
from django.urls import reverse
from telegram import Update
from telegram.error import NetworkError, TelegramError
from bot.dispatcher import TELEGRAM_BOT, setup_handlers
logging.getLogger("httpx").setLevel(logging.WARNING)
logger = logging.getLogger(__name__)
async def main() -> None:
server = uvicorn.Server(
config=uvicorn.Config(
app=get_asgi_application(),
use_colors=settings.DEBUG,
host="0.0.0.0",
port=settings.PORT,
)
)
setup_handlers(TELEGRAM_BOT)
await TELEGRAM_BOT.bot.delete_webhook(drop_pending_updates=True)
await TELEGRAM_BOT.bot.set_webhook(
url=urljoin(settings.EXTERNAL_URL, reverse("bot:telegram_webhook")),
allowed_updates=Update.ALL_TYPES,
secret_token=settings.TELEGRAM_SECRET,
)
async with TELEGRAM_BOT:
try:
logger.info(await TELEGRAM_BOT.bot.get_me())
logger.info(await TELEGRAM_BOT.bot.get_webhook_info())
await TELEGRAM_BOT.start()
await server.serve()
except (NetworkError, TelegramError) as error:
logger.error("Telegram API error: %s", error, exc_info=True)
except OSError as error:
logger.error("Server error (port or config issue): %s", error, exc_info=True)
except asyncio.CancelledError:
logger.info("Asyncio task cancelled, shutting down gracefully.")
raise
except KeyboardInterrupt:
logger.info("Server stopped manually.")
except Exception as error:
logger.error("Unexpected error: %s", error, exc_info=True)
finally:
await TELEGRAM_BOT.stop()
if __name__ == "__main__":
asyncio.run(main())