-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathrun.py
86 lines (68 loc) · 2.38 KB
/
run.py
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from __future__ import annotations
import argparse
import asyncio
import contextlib
import logging
import os
import sys
import aiohttp
import aiohttp.http_websocket
import asyncpg
import discord
from dotenv import load_dotenv
from fake_useragent import UserAgent
from loguru import logger
from hoyo_buddy.bot import HoyoBuddy
from hoyo_buddy.db.pgsql import Database
from hoyo_buddy.l10n import translator
from hoyo_buddy.logging import InterceptHandler
from hoyo_buddy.models import Config
from hoyo_buddy.utils import init_sentry, wrap_task_factory
from hoyo_buddy.web_server.server import GeetestWebServer
load_dotenv()
env = os.environ["ENV"] # dev, prod, test
is_dev = env == "dev"
ua = UserAgent()
parser = argparse.ArgumentParser()
parser.add_argument("--sentry", action="store_true", default=not is_dev)
parser.add_argument("--search", action="store_true", default=not is_dev)
parser.add_argument("--schedule", action="store_true", default=not is_dev)
config = Config(parser.parse_args())
discord.VoiceClient.warn_nacl = False
async def main() -> None:
wrap_task_factory()
async with (
asyncpg.create_pool(os.environ["DB_URL"]) as pool,
aiohttp.ClientSession(headers={"User-Agent": ua.random}) as session,
Database(),
translator,
HoyoBuddy(session=session, env=env, pool=pool, config=config) as bot,
):
with contextlib.suppress(
KeyboardInterrupt, asyncio.CancelledError, aiohttp.http_websocket.WebSocketError
):
geetest_server = GeetestWebServer()
asyncio.create_task(geetest_server.run())
with bot.executor:
await bot.start(os.environ["DISCORD_TOKEN"])
if __name__ == "__main__":
logger.remove()
if config.sentry:
init_sentry()
logger.add(sys.stderr, level="DEBUG" if is_dev else "INFO")
logging.basicConfig(handlers=[InterceptHandler()], level=logging.INFO, force=True)
logger.add("logs/hoyo_buddy.log", rotation="1 day", retention="2 weeks", level="DEBUG")
try:
from icecream import install
except ImportError:
pass
else:
install()
if sys.platform == "win32":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
try:
import uvloop # pyright: ignore[reportMissingImports]
except ImportError:
asyncio.run(main())
else:
uvloop.run(main())