summaryrefslogtreecommitdiff
path: root/commands/basic_games.py
diff options
context:
space:
mode:
Diffstat (limited to 'commands/basic_games.py')
-rw-r--r--commands/basic_games.py204
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):