diff --git a/README.md b/README.md index a290b5a..0e6cc6a 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,13 @@ This bot extends the rewrite version of discord.py. A couple of variables have b Make sure this one is installed. Example: ```py -if self.bot.mainenance: +if self.bot.maintenance: print('I am in the development branch') -if not self.bot.mainenance: +if not self.bot.maintenance: print('I am in the master branch') ``` -In other words. `self.mainenance` returns `False` in production and `True` in developer modes. +In other words. `self.maintenance` returns `False` in production and `True` in developer modes. > `self.bot.embed_color` diff --git a/src/__main__.py b/src/__main__.py index a883bd2..e3a96fb 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -19,6 +19,7 @@ from discord.ext import commands from src.config.config import LoadConfig from src.shared_libs.loggable import Loggable from src.shared_libs.ioutils import in_here +from src.shared_libs import database # Init logging to output on INFO level to stderr. @@ -52,6 +53,9 @@ class SebiMachine(commands.Bot, LoadConfig, Loggable): # Initialize and attach config / settings LoadConfig.__init__(self) commands.Bot.__init__(self, command_prefix=self.defaultprefix) + with open(in_here('config', 'PrivateConfig.json')) as fp: + self.bot_secrets = json.load(fp) + self.db_con = database.DatabaseConnection(**self.bot_secrets['db-con']) # Load plugins # Add your cog file name in this list @@ -134,11 +138,5 @@ class SebiMachine(commands.Bot, LoadConfig, Loggable): client = SebiMachine() -# Make sure the key stays private. -# I am 99% certain this is valid! -with open(in_here('config', 'PrivateConfig.json')) as fp: - PrivateConfig = json.load(fp) -if PrivateConfig["bot-key"] == '': - PrivateConfig["bot-key"] = os.getenv('botkey') -client.run(PrivateConfig["bot-key"]) +client.run(client.bot_secrets["bot-key"]) diff --git a/src/cogs/basic_commands.py b/src/cogs/basic_commands.py index b69c5c5..bba4dc9 100644 --- a/src/cogs/basic_commands.py +++ b/src/cogs/basic_commands.py @@ -3,54 +3,64 @@ from discord.ext import commands import discord +import asyncio class BasicCommands: - def __init__(self, bot): - self.bot = bot + def __init__(self, bot): + self.bot = bot - @commands.command() - async def start(self, ctx): - await ctx.send(f"Hello, {ctx.author.display_name}. Welcome to Sebi's Bot Tutorials. \nFirst off, would you like a quick walkthrough on the server channels?") - - channel_list = {'channel-1' : self.bot.get_channel(333149949883842561).mention, - 'd.py-rewrite-start' : self.bot.get_channel(386419285439938560).mention, - 'js-klasa-start' : self.bot.get_channel(341816240186064897).mention, - 'd.js' : self.bot.get_channel(436771798303113217).mention} + @commands.command() + async def start(self, ctx): + await ctx.send(f"Hello, {ctx.author.display_name}. Welcome to Sebi's Bot Tutorials. \nFirst off, would you like a quick walkthrough on the server channels?") + + channel_list = {'channel-1' : self.bot.get_channel(333149949883842561).mention, + 'd.py-rewrite-start' : self.bot.get_channel(386419285439938560).mention, + 'js-klasa-start' : self.bot.get_channel(341816240186064897).mention, + 'd.js' : self.bot.get_channel(436771798303113217).mention} - bots_channels = (self.bot.get_channel(339112602867204097).mention, + bots_channels = (self.bot.get_channel(339112602867204097).mention, self.bot.get_channel(411586546551095296).mention) - help_channels = (self.bot.get_channel(425315253153300488).mention, + help_channels = (self.bot.get_channel(425315253153300488).mention, self.bot.get_channel(392215236612194305).mention, - self.bot.get_channel(351034776985141250).mention) + self.bot.get_channel(351034776985141250).mention) - def check(m): - return True if m.author.id == ctx.author.id and m.channel.id == ctx.channel.id else False - - msg = await self.bot.wait_for('message', check = check, timeout = 15) + def check(m): + return True if m.author.id == ctx.author.id and m.channel.id == ctx.channel.id else False + + msg = await self.bot.wait_for('message', check = check, timeout = 15) - agree = ("yes", "yep", "yesn't", "ya") + agree = ("yes", "yep", "yesn't", "ya", "ye") - if msg is None: - await ctx.send("Sorry, {ctx.author.mention}, you didn't reply on time. You can run the command again when you're free :)") - else: - if msg.content.lower() in agree: - async with ctx.typing(): - await ctx.send("Alrighty-Roo...") - await ctx.send(f"""To start making your bot from scratch, you first need to head over to {channel_list['channel-1']} - (Regardless of the language you're gonna use).""") - await ctx.send(f"""After you have a bot account, you can either continue with {channel_list['d.py-rewrite-start']} - if you want to make a bot in discord.py rewrite __or__ go to {channel_list['js-klasa-start']} or - {channel_list['d.js']} for making a bot in JavaScript""") - await ctx.send("...Read all the tutorials and still need help? You have two ways to get help.") - await ctx.send(f"""**Method-1**\nThis is the best method of getting help. You help yourself.\n - To do so, head over to a bots dedicated channel (either {bots_channels[0]} or {bots_channels[1]}) - and type `?rtfm rewrite thing_you_want_help_with`.\nThis will trigger the bot R.Danny Bot and will - give you links on your query on the official discord.py rewrite docs. *PS: Let the page completely load*""") - await ctx.send(f"""**Method-2**\nIf you haven't found anything useful with Method-1, feel free to ask your question - in any of the related help channels. ({', '.join(help_channels)})\nMay the force be with you!!""") - else: - return await ctx.send("Session terminated. You can run this command again whenever you want.") + if msg is None: + await ctx.send("Sorry, {ctx.author.mention}, you didn't reply on time. You can run the command again when you're free :)") + else: + if msg.content.lower() in agree: + async with ctx.typing(): + await ctx.send("Alrighty-Roo... Check your DMs!") + await ctx.author.send("Alrighty-Roo...") + + await ctx.author.send(f"To start making your bot from scratch, you first need to head over to {channel_list['channel-1']}" + " (Regardless of the language you're gonna use).") + + await asyncio.sleep(0.5) + await ctx.author.send(f"After you have a bot account, you can either continue with {channel_list['d.py-rewrite-start']}" + f"if you want to make a bot in discord.py rewrite __or__ go to {channel_list['js-klasa-start']} or " + f"{channel_list['d.js']} for making a bot in JavaScript.") + + await ctx.author.send("...Read all the tutorials and still need help? You have two ways to get help.") + await asyncio.sleep(1.5) + await ctx.author.send("**Method-1**\nThis is the best method of getting help. You help yourself.\n" + f"To do so, head over to a bots dedicated channel (either {bots_channels[0]} or {bots_channels[1]})" + " and type `?rtfm rewrite thing_you_want_help_with`.\nThis will trigger the bot R.Danny Bot and will" + "give you links on your query on the official discord.py rewrite docs. *PS: Let the page completely load*") + + await asyncio.sleep(5) + await ctx.author.send("**Method-2**\nIf you haven't found anything useful with Method-1, feel free to ask your question " + f"in any of the related help channels. ({', '.join(help_channels)})\nMay the force be with you!!") + + else: + return await ctx.send("Session terminated. You can run this command again whenever you want.") def setup(bot): - bot.add_cog(BasicCommands(bot)) \ No newline at end of file + bot.add_cog(BasicCommands(bot)) diff --git a/src/shared_libs/database.py b/src/shared_libs/database.py new file mode 100644 index 0000000..edcc655 --- /dev/null +++ b/src/shared_libs/database.py @@ -0,0 +1,23 @@ +import asyncpg +import asyncio + + +class DatabaseConnection: + def __init__(self, host: str='localhost', port: int=5432, database: str='', user: str='', password: str=''): + if user == '' or password == '' or database == '': + raise RuntimeError('Username or Password are blank') + self.kwargs = {'host': host, 'port': port, 'database': database, 'user': user, 'password': password} + self._conn = None + asyncio.get_event_loop().run_until_complete(self.acquire()) + self.fetchval = self._conn.fetchval + self.execute = self._conn.execute + self.fetch = self._conn.fetch + self.fetchrow = self._conn.fetchrow + + async def acquire(self): + if not self._conn: + self._conn = await asyncpg.create_pool(**self.kwargs) + + async def close(self): + await self._conn.close() + self._conn = None