This repository was archived by the owner on Feb 17, 2025. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
85 lines (71 loc) · 2.74 KB
/
main.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
# Copyright 2021 Vioshim
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import annotations
import asyncio
from logging import getLogger, setLoggerClass
from os import getenv
from aiogoogle import Aiogoogle
from aiogoogle.auth.creds import ServiceAccountCreds
from apscheduler import AsyncScheduler
from discord import Streaming
from discord.ext.commands import when_mentioned_or
from dotenv import load_dotenv
from orjson import loads
from src.structures.bot import CustomBot
from src.structures.logger import ColoredLogger
setLoggerClass(ColoredLogger)
logger = getLogger(__name__)
load_dotenv()
async def main() -> None:
"""Main Execution function"""
try:
google_kwargs = loads(open("service-account-key.json", "r").read())
creds = ServiceAccountCreds(
**google_kwargs,
scopes=[
"https://www.googleapis.com/auth/documents",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/spreadsheets.readonly",
],
)
async with (
Aiogoogle(service_account_creds=creds) as aiogoogle,
AsyncScheduler() as scheduler,
CustomBot(
activity=Streaming(name="Support V-Bot!", url="https://ko-fi.com/Vioshim"),
scheduler=scheduler,
logger=logger,
owner_ids={
678374009045254198, # Vioshim
406908562023907329, # CosmicHail
},
command_prefix=when_mentioned_or("?"),
description="This is Vioshim's bot",
command_attrs=dict(hidden=True),
case_insensitive=True,
aiogoogle=aiogoogle,
) as bot,
):
await bot.login(getenv("DISCORD_TOKEN", ""))
await bot.connect(reconnect=True)
except Exception as e:
logger.critical("An exception occurred while trying to connect.", exc_info=e)
if __name__ == "__main__":
try:
import uvloop # type: ignore
loop_factory = uvloop.new_event_loop
except ModuleNotFoundError:
loop_factory = None
logger.error("Not using uvloop")
asyncio.run(main(), debug=True, loop_factory=loop_factory)