diff options
Diffstat (limited to 'commands/basic_games.py')
-rw-r--r-- | commands/basic_games.py | 204 |
1 files changed, 191 insertions, 13 deletions
diff --git a/commands/basic_games.py b/commands/basic_games.py index 0b594ba..66524cd 100644 --- a/commands/basic_games.py +++ b/commands/basic_games.py @@ -1,5 +1,6 @@ from discord.ext.commands import Bot, Cog from discord_slash import cog_ext, SlashContext +from discord import Embed from discord_slash.utils.manage_commands import create_option, create_choice from base import config from models.user import User @@ -41,29 +42,206 @@ class BasicGames(Cog): async def coin_flip(self, ctx: SlashContext, num_coins: int, choice: int): user = User.get(User.discord_id == ctx.author_id) - await ctx.send(content=f"{user.username} is betting {num_coins} coins on {choice}") - result = random.randrange(0, 1) - choices = ["Heads", "Tails"] - await ctx.send(content=f"Coin flip lands on {choices[result]}") - if choice == choices[result]: - await ctx.send(content=f"You win {num_coins * 2} coins!") - user.add_coins(num_coins * 2) - else: - await ctx.send(content=f"You lose {num_coins} coins :(") + await ctx.send( + content=f"{user.username} is betting {num_coins} {config['currency']} on {choice}" + ) + result = random.randint(0, 200) + if result <= 110: + if choice == "Heads": + await ctx.send(content="Coin flip lands on Tails") + else: + await ctx.send(content="Coin flip lands on Heads") + + embed = Embed(description=f"{ctx.author.mention} loses!", colour=0xFF0000) + embed.add_field(name="Lost:", value=f"{num_coins} {config['currency']}") user.remove_coins(num_coins) + elif result > 110 and result < 199: + if choice == "Heads": + await ctx.send(content="Coin flip lands on Heads") + else: + await ctx.send(content="Coin flip lands on Tails") + embed = Embed(description=f"{ctx.author.mention} wins!", colour=0x00FF00) + embed.add_field(name="Prize:", value=f"{num_coins} {config['currency']}") + user.add_coins(num_coins) + elif result >= 199: + winnings = num_coins * 2 + embed = Embed( + description=f"The coin lands on it's side!{ctx.author.mention} wins double!", + colour=0x00FF00, + ) + embed.add_field(name="Prize:", value=f"{winnings} {config['currency']}") + user.add_coins(winnings) + await ctx.send(embed=embed) user.save() @cog_ext.cog_slash( name="dice", description="Roll some dice.", guild_ids=[config["discord_server_id"]], + options=[ + create_option( + name="num_coins", + description="coins to bet", + option_type=4, + required=True, + ), + ], + ) + async def dice(self, ctx: SlashContext, num_coins: int): + user = User.get(User.discord_id == ctx.author_id) + if user.currency < num_coins: + await ctx.send( + content=f"{user.display_name}, you don't have enough {config['currency']} for that bet" + ) + return False + + results = [ + random.randint(1, 6), + random.randint(1, 6), + random.randint(1, 6), + random.randint(1, 6), + ] + await ctx.send(content=f"{user.display_name}, you roll a {results[0]} and a {results[1]}") + + user_total = results[0] + results[1] + bot_total = results[2] + results[3] + if user_total == 12: + winnings = num_coins * 3 + + embed = Embed( + description=f"{ctx.author.mention} rolls a double 6!!! You win!", colour=0x00FF00 + ) + embed.add_field(name="Prize:", value=f"{winnings} {config['currency']}") + user.add_coins(winnings) + elif results[0] == results[1]: + winnings = num_coins * 2 + embed = Embed( + description=f"{ctx.author.mention} rolls a double!! You win!", colour=0x00FF00 + ) + embed.add_field(name="Prize:", value=f"{winnings} {config['currency']}") + user.add_coins(winnings) + else: + await ctx.channel.send( + content=f"{user.display_name}, I rolled a {results[2]} and a {results[3]}" + ) + if user_total > bot_total: + embed = Embed(description=f"{ctx.author.mention} wins!", colour=0x00FF00) + embed.add_field(name="Prize:", value=f"{num_coins} {config['currency']}") + user.add_coins(num_coins) + elif user_total == bot_total: + embed = Embed( + description=f"{ctx.author.mention}, it's a draw. Have your money back...", + colour=0xFFFF00, + ) + else: + embed = Embed( + description=f"{ctx.author.mention} loses the dice roll :(", + colour=0xFF0000, + ) + embed.add_field(name="Lost:", value=f"{num_coins} {config['currency']}") + user.remove_coins(num_coins) + await ctx.channel.send(embed=embed) + user.save() + + @cog_ext.cog_slash( + name="slots", + description="Pull the slot machine.", + guild_ids=[config["discord_server_id"]], ) - async def dice(self, ctx: SlashContext): - print("dice") + async def slots(self, ctx: SlashContext): user = User.get(User.discord_id == ctx.author_id) - result = random.randrange(1, 6) - await ctx.send(content=f"{user.display_name}, you roll a {result}") + cost = 10 + if user.currency < cost: + await ctx.send( + content=f"{user.display_name}, you don't have enough {config['currency']}, it costs 100 {config['currency']} to play" + ) + return False + + await ctx.send( + content=f"{user.display_name}, you put {cost} {config['currency']} in the machine and pull the handle..." + ) + user.remove_coins(cost) + + slots = config["slots"] + + e = [] + for slot in slots: + for i in range(slot["rarity"]): + e.append(slot) + total = len(e) - 1 + results = [ + e[random.randint(0, total)], + e[random.randint(0, total)], + e[random.randint(0, total)], + ] + results_top = [ + e[random.randint(0, total)], + e[random.randint(0, total)], + e[random.randint(0, total)], + ] + results_bottom = [ + e[random.randint(0, total)], + e[random.randint(0, total)], + e[random.randint(0, total)], + ] + + result_text = "" + # e = list(config["slots"].values()) + winnings = 0 + + for r in results_top: + result_text += r["dark"] + result_text += "\n" + + for r in results: + result_text += r["emoji"] + result_text += "\n" + + for r in results_bottom: + result_text += r["dark"] + result_text += "\n" + + double = False + triple = False + + if results[0]["name"] == results[1]["name"] and results[0]["name"] == results[2]["name"]: + triple = True + winnings += results[0]["reward_triple"] + elif results[0]["name"] == results[1]["name"] or results[0]["name"] == results[2]["name"]: + double = True + winnings += results[0]["reward_double"] + elif results[1]["name"] == results[2]["name"]: + double = True + winnings += results[1]["reward_double"] + else: + for r in results: + winnings += r["reward_single"] + + await ctx.channel.send(content=result_text) + + if winnings == 0: + embed = Embed(description=f"No match :( {ctx.author.mention} loses...", colour=0xFF0000) + embed.add_field(name="Lost:", value=f"{cost} {config['currency']}") + else: + if triple: + embed = Embed( + description=f"JACKPOT! {ctx.author.mention} wins with a triple!!!", + colour=0x00FF00, + ) + elif double: + embed = Embed( + description=f"Ding ding! {ctx.author.mention} wins with a double!!", + colour=0x00FF00, + ) + else: + embed = Embed(description=f"{ctx.author.mention} wins!", colour=0x00FF00) + + embed.add_field(name="Prize:", value=f"{winnings} {config['currency']}") + user.add_coins(winnings) + + await ctx.channel.send(embed=embed) + user.save() def setup(bot): |