From 9570c0e9d323c2ecf054f3638f8d72620ee00ef0 Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Wed, 5 Apr 2023 22:48:12 +0800 Subject: [PATCH] General Clean Code --- addons/__init__.py | 2 +- addons/settings.py | 21 ++++++++++++++++++++- cogs/basic.py | 4 ++-- cogs/listeners.py | 6 ++---- cogs/playlist.py | 4 ---- function.py | 27 +++++++++------------------ main.py | 8 ++++---- views/help.py | 3 +-- voicelink/pool.py | 10 +++++----- 9 files changed, 44 insertions(+), 41 deletions(-) diff --git a/addons/__init__.py b/addons/__init__.py index aa4e903..38504d5 100644 --- a/addons/__init__.py +++ b/addons/__init__.py @@ -1,2 +1,2 @@ from .lyrics import getLyrics -from .settings import Settings \ No newline at end of file +from .lyrics import lyricsPlatform diff --git a/addons/settings.py b/addons/settings.py index 91ad991..c810338 100644 --- a/addons/settings.py +++ b/addons/settings.py @@ -1,3 +1,6 @@ +import os +from dotenv import load_dotenv + class Settings: def __init__(self, settings: dict) -> None: self.invite_link = "https://discord.gg/wRCgB7vBQv" @@ -15,4 +18,20 @@ class Settings: "port": 8000, "enable": False } - ) \ No newline at end of file + ) + +class TOKENS: + def __init__(self) -> None: + load_dotenv() + + self.token = os.getenv("TOKEN") + self.client_id = os.getenv("CLIENT_ID") + self.client_secret_id = os.getenv("CLIENT_SECRET_ID") + self.sercet_key = os.getenv("SERCET_KEY") + self.bug_report_channel_id = int(os.getenv("BUG_REPORT_CHANNEL_ID")) + self.spotify_client_id = os.getenv("SPOTIFY_CLIENT_ID") + self.spotify_client_secret = os.getenv("SPOTIFY_CLIENT_SECRET") + self.youtube_api_key = os.getenv("YOUTUBE_API_KEY") + self.genius_token = os.getenv("GENIUS_TOKEN") + self.mongodb_url = os.getenv("MONGODB_URL") + self.mongodb_name = os.getenv("MONGODB_NAME") \ No newline at end of file diff --git a/cogs/basic.py b/cogs/basic.py index 2805ed4..b048509 100644 --- a/cogs/basic.py +++ b/cogs/basic.py @@ -8,9 +8,9 @@ from function import ( time as ctime, formatTime, emoji_source, - youtube_api_key, requests_api, get_lang, + tokens, settings, cooldown_check, get_aliases, @@ -716,7 +716,7 @@ class Basic(commands.Cog): if track.source != 'youtube': return await ctx.send(player.get_msg('chatpersNotSupport'), ephemeral=True) - request_uri = "https://youtube.googleapis.com/youtube/v3/videos?part=snippet&id={videoId}&key={key}".format(videoId=track.identifier, key=youtube_api_key) + request_uri = "https://youtube.googleapis.com/youtube/v3/videos?part=snippet&id={videoId}&key={key}".format(videoId=track.identifier, key=tokens.youtube_api_key) data = await requests_api(request_uri) if not data: diff --git a/cogs/listeners.py b/cogs/listeners.py index c4a9f8b..a7cb1b9 100644 --- a/cogs/listeners.py +++ b/cogs/listeners.py @@ -1,10 +1,8 @@ import voicelink import asyncio import discord -import json import function as func -from os import getenv from discord.ext import commands class Nodes(commands.Cog): @@ -22,8 +20,8 @@ class Nodes(commands.Cog): for n in func.settings.nodes.values(): try: await self.voicelink.create_node(bot=self.bot, - spotify_client_id=getenv('SPOTIFY_CLIENT_ID'), - spotify_client_secret=getenv('SPOTIFY_CLIENT_SECRET'), + spotify_client_id=func.tokens.spotify_client_id, + spotify_client_secret=func.tokens.spotify_client_secret, **n) except: print(f'Node {n["identifier"]} is not able to connect!') diff --git a/cogs/playlist.py b/cogs/playlist.py index 533dbcc..f97c1ea 100644 --- a/cogs/playlist.py +++ b/cogs/playlist.py @@ -22,20 +22,17 @@ from function import ( from datetime import datetime from views import PlaylistView, InboxView, HelpView - def assign_playlistId(existed: list) -> str: for i in range(200, 210): if str(i) not in existed: return str(i) - async def check_playlist_perms(userid: int, authorid: int, dId: str) -> dict: playlist = await get_playlist(authorid, 'playlist', dId) if not playlist or userid not in playlist['perms']['read']: return {} return playlist - async def check_playlist(ctx: commands.Context, name: str = None, full: bool = False, share: bool = True) -> dict: user = await get_playlist(ctx.author.id, 'playlist') if not user: @@ -56,7 +53,6 @@ async def check_playlist(ctx: commands.Context, name: str = None, full: bool = F return {'playlist': playlist, 'position': index, 'id': data} return {'playlist': None, 'position': None, 'id': None} - async def search_playlist(url: str, requester: discord.Member, timeNeed=True): try: tracks = await voicelink.NodePool.get_node().get_tracks(url, requester=requester) diff --git a/function.py b/function.py index 5fafeab..69508f2 100644 --- a/function.py +++ b/function.py @@ -5,14 +5,13 @@ import os from importlib import import_module from discord.ext import commands -from dotenv import load_dotenv from random import choice from datetime import datetime from time import strptime from io import BytesIO from pymongo import MongoClient from typing import Optional, Union -from addons import Settings +from addons import Settings, TOKENS root_dir = os.path.dirname(os.path.abspath(__file__)) @@ -20,29 +19,22 @@ if not os.path.exists(os.path.join(root_dir, "settings.json")): raise Exception("Settings file not set!") #-------------- API Clients -------------- -load_dotenv() #Load .env settings -MONGODB_NAME = os.getenv('MONGODB_NAME') -MONGODB_URL = os.getenv('MONGODB_URL') -if not (MONGODB_NAME and MONGODB_URL): +tokens: TOKENS = TOKENS(); + +if not (tokens.mongodb_name and tokens.mongodb_url): raise Exception("MONGODB_NAME and MONGODB_URL can't not be empty in .env") try: - mongodb = MongoClient(host=MONGODB_URL, serverSelectionTimeoutMS=5000) + mongodb = MongoClient(host=tokens.mongodb_url, serverSelectionTimeoutMS=5000) mongodb.server_info() print("Successfully connected to MongoDB!") except Exception as e: raise Exception("Not able to connect MongoDB! Reason:", e) -collection = mongodb[MONGODB_NAME]['Settings'] -Playlist = mongodb[MONGODB_NAME]['Playlist'] -youtube_api_key = os.getenv('YOUTUBE_API_KEY') +collection = mongodb[tokens.mongodb_name]['Settings'] +Playlist = mongodb[tokens.mongodb_name]['Playlist'] #--------------- Cache Var --------------- -try: - report_channel_id = int(os.getenv("BUG_REPORT_CHANNEL_ID")) -except: - report_channel_id = 0 - settings: Settings error_log = {} #Stores error that not a Voicelink Exception langs = {} #Stores all the languages in ./langs @@ -50,7 +42,6 @@ guild_settings = {} #Cache guild language local_langs = {} #Stores all the localization languages in ./local_langs playlist_name = {} #Cache the user's playlist name - #-------------- Vocard Functions -------------- def get_settings(guild_id:int): settings = guild_settings.get(guild_id, None) @@ -178,7 +169,7 @@ async def similar_track(player) -> bool: if randomTrack.source != 'youtube': return False - if not youtube_api_key: + if not tokens.youtube_api_key: return False request_url = "https://youtube.googleapis.com/youtube/v3/search?part={part}&relatedToVideoId={videoId}&type={type}&videoCategoryId={videoCategoryId}&key={key}".format( @@ -186,7 +177,7 @@ async def similar_track(player) -> bool: videoId=randomTrack.identifier, type="video", videoCategoryId="10", - key=youtube_api_key + key=tokens.youtube_api_key ) try: diff --git a/main.py b/main.py index c153baf..4f2f215 100644 --- a/main.py +++ b/main.py @@ -8,11 +8,9 @@ import function as func from discord.ext import commands from web import IPCServer -from dotenv import load_dotenv from datetime import datetime from voicelink import VoicelinkException -load_dotenv() func.init() class Translator(discord.app_commands.Translator): @@ -35,7 +33,7 @@ class Vocard(commands.Bot): self, host=func.settings.ipc_server["host"], port=func.settings.ipc_server["port"], - sercet_key=os.getenv("SERCET_KEY") + sercet_key=func.tokens.sercet_key ) async def on_message(self, message: discord.Message, /) -> None: @@ -72,6 +70,8 @@ class Vocard(commands.Bot): print(f"Python Version: {sys.version}") print("------------------") + func.tokens.client_id = self.user.id + async def on_command_error(self, ctx: commands.Context, exception, /) -> None: error = getattr(exception, 'original', exception) if ctx.interaction: @@ -130,4 +130,4 @@ bot = Vocard(command_prefix=get_prefix, if __name__ == "__main__": update.checkVersion(withMsg=True) - bot.run(os.getenv("TOKEN"), log_handler=None) \ No newline at end of file + bot.run(func.tokens.token, log_handler=None) \ No newline at end of file diff --git a/views/help.py b/views/help.py index 506fde1..bfd4d27 100644 --- a/views/help.py +++ b/views/help.py @@ -24,7 +24,6 @@ SOFTWARE. import discord from discord.ext import commands -from os import getenv import function as func class HelpDropdown(discord.ui.Select): @@ -59,7 +58,7 @@ class HelpView(discord.ui.View): self.categorys = [ name.capitalize() for name, cog in bot.cogs.items() if len([c for c in cog.walk_commands()]) ] self.add_item(discord.ui.Button(label='Support', emoji=':support:915152950471581696', url=func.settings.invite_link)) - self.add_item(discord.ui.Button(label='Invite', emoji=':invite:915152589056790589', url='https://discord.com/oauth2/authorize?client_id={}&permissions=2184260928&scope=bot%20applications.commands'.format(getenv('CLIENT_ID')))) + self.add_item(discord.ui.Button(label='Invite', emoji=':invite:915152589056790589', url='https://discord.com/oauth2/authorize?client_id={}&permissions=2184260928&scope=bot%20applications.commands'.format(func.tokens.client_id))) self.add_item(discord.ui.Button(label='Github', url='https://github.com/ChocoMeow/Vocard')) self.add_item(discord.ui.Button(label='Donate', emoji=':patreon:913397909024800878', url='https://www.patreon.com/Vocard')) self.add_item(HelpDropdown(self.categorys)) diff --git a/voicelink/pool.py b/voicelink/pool.py index 5536aba..1dd22af 100644 --- a/voicelink/pool.py +++ b/voicelink/pool.py @@ -24,14 +24,14 @@ SOFTWARE. from __future__ import annotations import asyncio -import json import os import re +import aiohttp + +from discord import Client, Member from typing import Dict, Optional, TYPE_CHECKING, Union from urllib.parse import quote - -import aiohttp -from discord import Client, Member +import function as func from . import ( @@ -122,7 +122,7 @@ class Node: self._headers = { "Authorization": self._password, - "User-Id": str(os.getenv('CLIENT_ID')), + "User-Id": str(func.tokens.client_id), "Client-Name": f"Voicelink/{__version__}", 'Resume-Key': self.resume_key }