import discord, asyncio, json from discord.ext import commands from discord_slash import cog_ext from discord_slash import SlashCommandOptionType as scot from utils import getParams params = getParams() class GamesCog(commands.Cog): def __init__(self,bot): """Runs game stuff.""" self.bot = bot # Checks user balance @cog_ext.cog_slash(**params["balance"]) async def balance(self, ctx): await ctx.defer() response = self.bot.money.checkBalance("#"+str(ctx.author.id)) if response == 1: new_message = ctx.author.display_name + " has " + str(response) + " GwendoBuck" else: new_message = ctx.author.display_name + " has " + str(response) + " GwendoBucks" await ctx.send(new_message) # Gives another user an amount of GwendoBucks @cog_ext.cog_slash(**params["give"]) async def give(self, ctx, user, amount): await ctx.defer() username = user.display_name if self.bot.databaseFuncs.getID(username) == None: async for member in ctx.guild.fetch_members(limit=None): if member.display_name.lower() == username.lower(): username = member.display_name userID = "#" + str(member.id) self.bot.database["users"].insert_one({"_id":userID,"user name":username,"money":0}) response = self.bot.money.giveMoney("#"+str(ctx.author.id),username,amount) await ctx.send(response) # Invest GwendoBucks in the stock market @cog_ext.cog_slash(**params["invest"]) async def invest(self, ctx, parameters = "check"): await ctx.defer() response = self.bot.games.invest.parseInvest(parameters,"#"+str(ctx.author.id)) if response.startswith("**"): responses = response.split("\n") em = discord.Embed(title=responses[0],description="\n".join(responses[1:]),colour=0x00FF00) await ctx.send(embed=em) else: await ctx.send(response) # Runs a game of trivia @cog_ext.cog_slash(**params["trivia"]) async def trivia(self, ctx, answer = ""): await ctx.defer() if answer == "": question, options, correctAnswer = self.bot.games.trivia.triviaStart(str(ctx.channel_id)) if options != "": results = "**"+question+"**\n" for x, option in enumerate(options): results += chr(x+97) + ") "+option+"\n" await ctx.send(results) await asyncio.sleep(60) self.bot.games.trivia.triviaCountPoints(str(ctx.channel_id)) self.bot.databaseFuncs.deleteGame("trivia questions",str(ctx.channel_id)) self.bot.log("Time's up for the trivia question",str(ctx.channel_id)) await ctx.send("Time's up The answer was \""+chr(correctAnswer)+") "+options[correctAnswer-97]+"\". Anyone who answered that has gotten 1 GwendoBuck") else: await ctx.send(question, hidden=True) elif answer in ["a","b","c","d"]: response = self.bot.games.trivia.triviaAnswer("#"+str(ctx.author.id),str(ctx.channel_id),answer) if response.startswith("Locked in "): await ctx.send(f"{ctx.author.display_name} answered {answer}") else: await ctx.send(response) else: self.bot.log("I didn't understand that (error code 1101)",str(ctx.channel_id)) await ctx.send("I didn't understand that (error code 1101)") class BlackjackCog(commands.Cog): def __init__(self,bot): """Runs game stuff.""" self.bot = bot # Starts a game of blackjack @cog_ext.cog_subcommand(**params["blackjackStart"]) async def blackjackStart(self, ctx): await ctx.defer() await self.bot.games.blackjack.parseBlackjack("", ctx) @cog_ext.cog_subcommand(**params["blackjackBet"]) async def blackjackBet(self, ctx, bet): await ctx.defer() await self.bot.games.blackjack.parseBlackjack(f"bet {bet}", ctx) @cog_ext.cog_subcommand(**params["blackjackStand"]) async def blackjackStand(self, ctx, hand = ""): await ctx.defer() await self.bot.games.blackjack.parseBlackjack(f"stand {hand}", ctx) @cog_ext.cog_subcommand(**params["blackjackHit"]) async def blackjackHit(self, ctx, hand = ""): await ctx.defer() await self.bot.games.blackjack.parseBlackjack(f"hit {hand}", ctx) class ConnectFourCog(commands.Cog): def __init__(self,bot): """Runs game stuff.""" self.bot = bot # Start a game of connect four against a user @cog_ext.cog_subcommand(**params["connectFourStartUser"]) async def connectFourStartUser(self, ctx, user): await ctx.defer() await self.bot.games.gameLoops.connectFour(ctx, "start "+user.display_name) # Start a game of connect four against gwendolyn @cog_ext.cog_subcommand(**params["connectFourStartGwendolyn"]) async def connectFourStartGwendolyn(self, ctx, difficulty = 3): await ctx.defer() await self.bot.games.gameLoops.connectFour(ctx, "start "+str(difficulty)) # Stop the current game of connect four @cog_ext.cog_subcommand(**params["connectFourStop"]) async def connectFourStop(self, ctx): await self.bot.games.gameLoops.connectFour(ctx, "stop") # Place a piece in the current game of connect four @cog_ext.cog_subcommand(**params["connectFourPlace"]) async def connectFourPlace(self, ctx, column): await self.bot.games.gameLoops.connectFour(ctx, "place "+str(column)) class HangmanCog(commands.Cog): def __init__(self,bot): """Runs game stuff.""" self.bot = bot # Starts a game of Hangman @cog_ext.cog_subcommand(**params["hangmanStart"]) async def hangmanStart(self, ctx): await ctx.defer() await self.bot.games.gameLoops.runHangman(ctx.channel,"#"+str(ctx.author.id),"start", ctx) # Stops a game of Hangman @cog_ext.cog_subcommand(**params["hangmanStop"]) async def hangmanStop(self, ctx): await self.bot.games.gameLoops.runHangman(ctx.channel,"#"+str(ctx.author.id),"stop", ctx) class HexCog(commands.Cog): def __init__(self,bot): """Runs game stuff.""" self.bot = bot # Start a game of Hex against another user @cog_ext.cog_subcommand(**params["hexStartUser"]) async def hexStartUser(self, ctx, user): await ctx.defer() await self.bot.games.gameLoops.runHex(ctx, "start "+user.display_name, "#"+str(ctx.author.id)) # Start a game of Hex against Gwendolyn @cog_ext.cog_subcommand(**params["hexStartGwendolyn"]) async def hexStartGwendolyn(self, ctx, difficulty = 2): await ctx.defer() await self.bot.games.gameLoops.runHex(ctx, "start "+str(difficulty), "#"+str(ctx.author.id)) # Undo your last hex move @cog_ext.cog_subcommand(**params["hexUndo"]) async def hexUndo(self, ctx): await self.bot.games.gameLoops.runHex(ctx, "undo", "#"+str(ctx.author.id)) # Perform a hex swap @cog_ext.cog_subcommand(**params["hexSwap"]) async def hexSwap(self, ctx): await self.bot.games.gameLoops.runHex(ctx, "swap", "#"+str(ctx.author.id)) # Surrender the hex game @cog_ext.cog_subcommand(**params["hexSurrender"]) async def hexSurrender(self, ctx): await self.bot.games.gameLoops.runHex(ctx, "surrender", "#"+str(ctx.author.id)) # Place a piece in the hex game @cog_ext.cog_subcommand(**params["hexPlace"]) async def hexPlace(self, ctx, coordinates): await self.bot.games.gameLoops.runHex(ctx, "place "+coordinates, "#"+str(ctx.author.id)) def setup(bot): bot.add_cog(GamesCog(bot)) bot.add_cog(BlackjackCog(bot)) bot.add_cog(ConnectFourCog(bot)) bot.add_cog(HangmanCog(bot)) bot.add_cog(HexCog(bot))