198 lines
7.8 KiB
Python
198 lines
7.8 KiB
Python
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)) |