blob/commands/economy.py
2023-11-24 14:47:19 -05:00

146 lines
7.4 KiB
Python

import discord, pymongo, random, os
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
class economy(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_ready(self):
print("Economy Online")
@commands.hybrid_command(name="beg", description="Beg for money")
@commands.cooldown(1, 60, commands.BucketType.user)
async def beg(self, ctx):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
num = random.randint(1, 100)
try:
coll.insert_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}, "coins":num})
await ctx.send(f"{ctx.author.mention} begged for money and got {num} bloboons!")
except pymongo.errors.DuplicateKeyError:
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":num}})
await ctx.send(f"{ctx.author.mention} begged for money and got {num} bloboons!")
@commands.hybrid_command(name="balance", description="Check your balance", aliases=["bal"])
@commands.cooldown(1, 60, commands.BucketType.user)
async def balance(self, ctx, member:discord.Member = None):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
if member == None:
member = ctx.author
users = coll.find({})
for user in users:
if user["_id"]["author_id"] == member.id and user["_id"]["guild_id"] == ctx.guild.id:
await ctx.send(f"{member.mention} has {user['coins']} coins!")
return
await ctx.send(f"{member.mention} has 0 bloboons!")
@commands.hybrid_command(name="pay", description="Pay someone")
@commands.cooldown(1, 60, commands.BucketType.user)
async def pay(self, ctx, member:discord.Member, amount:int):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
users = coll.find({})
for user in users:
if user["_id"]["author_id"] == ctx.author.id and user["_id"]["guild_id"] == ctx.guild.id:
if user["coins"] < amount:
await ctx.send("You don't have enough bloboons!")
return
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":-amount}})
for user in users:
if user["_id"]["author_id"] == member.id and user["_id"]["guild_id"] == ctx.guild.id:
coll.update_one({"_id": {'author_id': member.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":amount}})
await ctx.send(f"You paid {member.mention} {amount} bloboons!")
return
coll.insert_one({"_id": {'author_id': member.id, 'guild_id': ctx.guild.id}, "coins":amount})
await ctx.send(f"You paid {member.mention} {amount} bloboons!")
return
@commands.hybrid_command(name="work", description="Work for money")
@commands.cooldown(1, 60, commands.BucketType.user)
async def work(self, ctx):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
num = random.randint(1, 500)
try:
coll.insert_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}, "coins":num})
await ctx.send(f"{ctx.author.mention} worked for money and got {num} bloboons!")
except pymongo.errors.DuplicateKeyError:
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":num}})
await ctx.send(f"{ctx.author.mention} worked for money and got {num} bloboons!")
@commands.hybrid_command(name="rob", description="Rob someone")
@commands.cooldown(1, 60, commands.BucketType.user)
async def rob(self, ctx, member:discord.Member):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
users = coll.find({})
for user in users:
if user["_id"]["author_id"] == ctx.author.id and user["_id"]["guild_id"] == ctx.guild.id:
if user["coins"] < 100:
await ctx.send("You don't have enough bloboons!")
return
for user in users:
if user["_id"]["author_id"] == member.id and user["_id"]["guild_id"] == ctx.guild.id:
if user["coins"] < 100:
await ctx.send("They don't have enough bloboons!")
return
num = random.randint(1, 100)
if num > 50:
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":100}})
coll.update_one({"_id": {'author_id': member.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":-100}})
await ctx.send(f"You robbed {member.mention} and got 100 bloboons!")
return
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":-100}})
await ctx.send(f"You failed to rob {member.mention} and lost 100 bloboons!")
return
await ctx.send("They don't have an account!")
return
@commands.hybrid_command(name="slots", description="Play slots")
@commands.cooldown(1, 60, commands.BucketType.user)
async def slots(self, ctx, amount:int):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
users = coll.find({})
num = random.randint(1, 1000)
for user in users:
if user["_id"]["author_id"] == ctx.author.id and user["_id"]["guild_id"] == ctx.guild.id:
if user["coins"] < amount:
await ctx.send("You don't have enough bloboons!")
return
if num > 50:
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":num}})
await ctx.send(f"You won {num} bloboons!")
return
coll.update_one({"_id": {'author_id': ctx.author.id, 'guild_id': ctx.guild.id}}, {"$inc":{"coins":-amount}})
await ctx.send(f"You lost {amount} bloboons!")
return
@commands.hybrid_command(name="eleaderboard", description="View the leaderboard", aliases=["elb"])
@commands.cooldown(1, 60, commands.BucketType.user)
async def eleaderboard(self, ctx):
client = pymongo.MongoClient(os.getenv("mongo_url"))
db = client.servers
coll = db.economy
users = coll.find({})
users = sorted(users, key=lambda x: x["coins"], reverse=True)
embed = discord.Embed(title="Leaderboard", description="The top 10 richest people in the server", color=discord.Color.blue())
for i in range(10):
embed.add_field(name=f"{i+1}. {ctx.guild.get_member(users[i]['_id']['author_id']).name}", value=f"{users[i]['coins']} bloboons", inline=False)
await ctx.send(embed=embed)
async def setup(bot):
await bot.add_cog(economy(bot))