Пример #1
0
 async def plant(ctx):
     db.check_user(ctx.message, conn)
     if not (db.check_player(ctx.message, conn)):
         async with ctx.message.channel.typing():
             await asyncio.sleep(3)
         await ctx.message.channel.send('Welcome new player!')
         async with ctx.message.channel.typing():
             await asyncio.sleep(3)
         await ctx.message.channel.send(
             'You currently have no coffee beans, but you\'ll get more soon!'
         )
         async with ctx.message.channel.typing():
             await asyncio.sleep(3)
     if (db.plant_beans(ctx.message, conn)):
         outputString = 'Your coffee tree have been planted! Please wait a while until it\'s ready to harvest.'
         plantEmbed = discord.Embed(title='Coffee has been Planted!',
                                    description=outputString,
                                    colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=plantEmbed)
     else:
         outputString = 'You\'ve already planted a tree!'
         plantEmbed = discord.Embed(title='Coffee Already Planted!',
                                    description=outputString,
                                    colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=plantEmbed)
Пример #2
0
async def on_message(message):
    await verify(message)
    await suggestionListener(message)
    db.check_user(message, conn)
    global prefix
    global busy

    if message.author == client.user:
        return

    await client.process_commands(message)
Пример #3
0
    async def prices(ctx):
        db.check_user(ctx.message, conn)
        results = db.get_last_prices(conn, 13)
        previousPrice = 0
        resultHistory = []
        outputString = ''

        for result in reversed(results):
            price = result[0]
            diff = float("{:.2f}".format(price - previousPrice))
            previousPrice = price
            resultHistory.append((price, diff))
        del resultHistory[0]
        count = 0
        for result in reversed(resultHistory):
            hisPrice = result[0]
            hisDiff = result[1]
            if hisDiff < 0:
                symbol = '\U0001F534'
                diff = '-$' + '{:.2f}'.format(abs(hisDiff))
                perc = '-{:.2f}%'.format(abs(hisDiff / hisPrice))
            elif result[1] > 0:
                symbol = '\U0001F7E2'
                diff = '+$' + '{:.2f}'.format(abs(hisDiff))
                perc = '+{:.2f}%'.format(abs(hisDiff / hisPrice))
            else:
                symbol = '\U000026AA'
                diff = '$0.00'
            hisPrice = '{:.2f}'.format(float(hisPrice))
            outputString = f'{outputString}[{symbol} {perc}] **${hisPrice}** {diff} '
            if count < 1:
                outputString = f'{outputString} | **CURRENT**\n'
                count += 30
            else:
                if (count < 60):
                    outputString = f'{outputString} | {count%60} minutes ago.\n'
                elif (count % 60 == 0):
                    outputString = f'{outputString} | {int(math.floor(count/60))} hours ago.\n'
                else:
                    outputString = f'{outputString} | {int(math.floor(count/60))} hours and {count%60} minutes ago.\n'
                count += 30
        pricesEmbed = discord.Embed(title='Coffee Price History',
                                    description=outputString,
                                    colour=conf.colourCoffee)
        nextTickTime = 1800 - int(math.floor(time.time() % 1800))
        footerText = ''
        if (nextTickTime > 60):
            footerText = f'{footerText}Next tick : {int(math.floor(nextTickTime/60))} minutes and {int(math.floor(nextTickTime%60))} seconds.\n'
        else:
            footerText = f'{footerText}Next tick : {int(math.floor(nextTickTime%60))} seconds.\n'
        footerText = f'{footerText}Prices are updated every 30 minutes.'
        pricesEmbed.set_footer(text=footerText)
        await ctx.message.channel.send(embed=pricesEmbed)
Пример #4
0
 async def shop(ctx):
     db.check_user(ctx.message, conn)
     if not(db.check_player(ctx.message, conn)):
         await cf.introMessage(ctx.message)
     else:
         itemTrees = f'Trees : **$10** per tree.'
         itemLand = f'Land : **$5,000** per acre (space for 500 trees).'
         outputString = itemTrees + '\n' + itemLand
         shopEmbed = discord.Embed(title='Shop', description=outputString, colour=conf.colourCoffee)
         footerString = '$buy [item name] [amount]'
         shopEmbed.set_footer(text=footerString)
         await ctx.message.channel.send(embed=shopEmbed)
Пример #5
0
    async def status(ctx):
        db.check_user(ctx.message, conn)
        if not (db.check_player(ctx.message, conn)):
            await introMessage(ctx.message)
        else:
            userAvatar = ctx.author.avatar_url
            bags = db.get_bags(ctx.message, conn)
            beans = db.get_beans(ctx.message, conn)
            money = db.get_money(ctx.message, conn)
            trees = db.get_trees(ctx.message, conn)
            land = db.get_land(ctx.message, conn)
            outputString = f'**Money** : ${money:,.2f}' + '\n=====================\n' + f'**Green Beans** : {beans:,} grams.' + '\n' + f'**Bags** : {bags:,} bags.' + '\n' + f'**Trees** : {trees:,} trees.' + '\n' + f'**Land** : {land:,} acres.'

            statusEmbed = discord.Embed(title=ctx.author.display_name,
                                        description=outputString,
                                        colour=conf.colourCoffee)
            # Alternate
            """
            statusEmbed.add_field(name='Green Beans', value=f'{beans:,} grams.', inline=True)
            statusEmbed.add_field(name='Bags', value=f'{bags:,} bags.', inline=True)
            statusEmbed.add_field(name='Trees', value=f'{trees:,} trees.', inline=False)
            statusEmbed.add_field(name='Land', value=f'{land:,} acres.', inline=True)
            statusEmbed.add_field(name='Money', value=f'${money:,.2f}', inline=False)
            """
            statusEmbed.set_thumbnail(url=userAvatar)
            await ctx.message.channel.send(embed=statusEmbed)
Пример #6
0
def runCoffeeStocks(conn):
    global tickRate
    while True:
        tickTime = time.time()
        if round(tickTime % tickRate) == 0:
            lastPrices = db.get_last_prices(conn, 1)
            oldPrice = lastPrices[0][0]
            newPrice = setSellPrice(oldPrice)
            db.insert_price_tick(tickTime, newPrice, conn)
            ''' Debug Only '''
            '''
            debugLastPrices = db.get_last_prices(conn, 1)
            debugNewestPrice = debugLastPrices[0][0]
            print(f'New stock price : {debugNewestPrice}')
            '''
            time.sleep(tickRate - 2)
        else:
            time.sleep(0.5)
Пример #7
0
 async def harvest(ctx):
     db.check_user(ctx.message, conn)
     if not (db.check_player(ctx.message, conn)):
         await introMessage(ctx.message)
     else:
         harvestedBeans = db.harvest_beans(ctx.message, conn)
         if (harvestedBeans >= 0):
             outputString = 'You harvested your coffee trees and got **' + f'{harvestedBeans:,}' + '** grams of green beans!'
             harvestEmbed = discord.Embed(title='Coffee Harvested!',
                                          description=outputString,
                                          colour=conf.colourCoffee)
             await ctx.message.channel.send(embed=harvestEmbed)
         else:
             outputString = 'You haven\'t ``$plant``ed any trees yet! .'
             harvestEmbed = discord.Embed(title='No Coffee to Harvest!',
                                          description=outputString,
                                          colour=conf.colourCoffee)
             await ctx.message.channel.send(embed=harvestEmbed)
Пример #8
0
 async def sell(ctx, arg):
     bags = int(arg)
     db.check_user(ctx.message, conn)
     if (bags > 0):
         revenue = db.sell_bags(ctx.message, bags, conn)
         if (revenue >= 0):
             outputString = f'You\'ve earned **${revenue:,.2f}** from selling **{bags:,}** bags.'
             sellEmbed = discord.Embed(title='Coffee Sold!',
                                       description=outputString,
                                       colour=conf.colourCoffee)
             await ctx.message.channel.send(embed=sellEmbed)
         else:
             outputString = f'You don\'t have any bags to sell. Try roasting your green beans by doing ``$roast [# of bags]``!'
             sellEmbed = discord.Embed(title='No Bags!',
                                       description=outputString,
                                       colour=conf.colourCoffee)
             await ctx.message.channel.send(embed=sellEmbed)
     else:
         outputString = f'You need to sell at least 1 bag!'
         sellEmbed = discord.Embed(title='Invalid Bag Ammount.',
                                   description=outputString,
                                   colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=sellEmbed)
Пример #9
0
 async def leaderboards(ctx, arg):
     db.check_user(ctx.message, conn)
     if (arg.lower() == 'beans'):
         results = db.get_beans_leaderboards(conn)
         outputString = ""
         for result in results:
             if (result[1] > 0):
                 name = result[0]
                 beans = result[1]
                 outputString = outputString + (
                     "**" + name + "** with **" + f'{beans:,}' +
                     "** grams of green beans.\n")
         leaderEmbed = discord.Embed(
             title='Leaderboards - Top 10 Coffee Producer',
             description=outputString,
             colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=leaderEmbed)
     elif (arg.lower() == 'money'):
         results = db.get_money_leaderboards(conn)
         outputString = ""
         for result in results:
             if (result[1] > 0):
                 name = result[0]
                 money = result[1]
                 outputString = f'{outputString}**{name}** with **${money:,.2f}**\n'
         leaderEmbed = discord.Embed(
             title='Leaderboards - Top 10 Wealthiest',
             description=outputString,
             colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=leaderEmbed)
     else:
         outputString = 'Invalid option. Try adding ``beans`` or ``money`` at the end of the command.'
         leaderEmbed = discord.Embed(title='Can\'t Retrieve Leaderboards.',
                                     description=outputString,
                                     colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=leaderEmbed)
Пример #10
0
 async def roast(ctx, *arg):
     try:
         db.check_user(ctx.message, conn)
         if (len(arg) == 1):
             bags = math.floor(int(arg[0]))
             if (bags < 1):
                 await ctx.message.channel.send(
                     'The amount of bags you specified isn\'t possible. Defaulting to **1**.'
                 )
                 bags = 1
         elif (len(arg) == 0):
             bags = 1
         else:
             await ctx.message.channel.send(
                 'Too many arguments. Use ``$roast`` or ``$roast [number]``'
             )
             return
         if not (db.check_player(ctx.message, conn)):
             await introMessage(ctx.message)
         else:
             currGreenBeans = db.get_beans(ctx.message, conn)
             if (currGreenBeans < (bags * 250)):
                 bags = math.floor(currGreenBeans / 250)
                 beansToRoast = 250 * bags
             else:
                 beansToRoast = 250 * bags
             if (beansToRoast < 250):
                 await ctx.message.channel.send(
                     'You currently only have **' + f'{beansToRoast:,}' +
                     '** grams of beans. You need at least 250 grams to make a bag.'
                 )
             else:
                 if db.roast_beans(ctx.message, beansToRoast, conn):
                     beans = db.get_beans(ctx.message, conn)
                     outputString = f'Done! You\'ve used **{beansToRoast:,}** beans to make **{bags:,}** bags. You have **{beans:,}** grams of green beans remaining.'
                     roastEmbed = discord.Embed(title='Beans Roasted!',
                                                description=outputString,
                                                colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=roastEmbed)
                 else:
                     await ctx.message.channel.send('Something went wrong.')
     except ValueError:
         await ctx.message.channel.send(
             'Please use a number. Example : ``$roast 2``')
Пример #11
0
import asyncio
import discord
import Config as conf
from discord.ext import commands
from modules import BaseCommands
from modules import CoffeeFarm
from modules import CoffeeShop
from modules import Moderation
from utils import DatabaseController as db

conn = db.create_connection(conf.dbPath)
token = conf.token
intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix=conf.prefix, intents=intents)
client.remove_command('help')
''' Initialize commands '''
bc = BaseCommands
bc.BaseCommands(client)
cf = CoffeeFarm
cf.CoffeeFarm(client, conn)
cs = CoffeeShop
cs.CoffeeShop(client, conn)
mod = Moderation
mod.Moderation(client, conn)


async def verify(message):
    verifyString = "I have read the rules and agree to the server's policies"
    generalChannel = client.get_channel(744871234881454184)
    if (message.channel.id
Пример #12
0
 async def buy(ctx, item: str, amount: int):
     if(amount >= 0):
         db.check_user(ctx.message, conn)
         item = item.lower()
         currentMoney = db.get_money(ctx.message, conn)
         if not(db.check_player(ctx.message, conn)):
             cf.introMessage(ctx.message)
         else:
             if item == 'trees':
                 availableAcres = db.get_land(ctx.message, conn)
                 currentTrees = db.get_trees(ctx.message, conn)
                 maxTreesLimit = conf.treesLimit * availableAcres
                 # Check if trees have been planted
                 if db.get_plant_status(ctx.message, conn) is True:
                     outputString = f'You currently have not harvested your trees yet! You\'re allowed to buy more trees after you\'ve harvested your coffee beans.'
                     buyEmbed = discord.Embed(title='Shop - Unharvested Crops', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
                 # Check if the amount of trees you're buying are exceeding the limit
                 elif (currentTrees + amount) > maxTreesLimit:
                     outputString = f'You have no more room for more trees! Currently you only have **{(maxTreesLimit - currentTrees):,}** trees worth of free space. Buy more land to plant more trees!'
                     buyEmbed = discord.Embed(title='Shop - Insufficient Room', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
                 # Check if the player has enough money to purchase the trees
                 elif currentMoney < (amount * conf.treePrice):
                     outputString = f'You currently have **${currentMoney:,.2f}** and tried to buy **${(amount*conf.treePrice):,.2f}** worth of {item}. Sell bags of coffee to get more money!'
                     buyEmbed = discord.Embed(title='Shop - Insufficient Funds', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
                 else:
                     db.buy_trees(ctx.message, amount, conn)
                     outputString = f'You\'ve bought {amount:,} {item}!'
                     buyEmbed = discord.Embed(title='Shop - Purchase Successful!', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
             if item == 'land':
                 # Check if the player has enough money to buy the land
                 if currentMoney < (amount * conf.landPrice):
                     # Purchase fail
                     outputString = f'You currently have **${currentMoney:,.2f}** and tried to buy **${(amount*conf.landPrice):,.2f}** worth of {item}. Sell bags of coffee to get more money!'
                     buyEmbed = discord.Embed(title='Shop - Insufficient Funds', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
                 else:
                     # Purchase successful
                     db.buy_land(ctx.message, amount, conn)
                     outputString = f'You\'ve bought {amount:,} {item}!'
                     buyEmbed = discord.Embed(title='Shop - Purchase Successful!', description=outputString, colour=conf.colourCoffee)
                     await ctx.message.channel.send(embed=buyEmbed)
     else:
         outputString = f'Invalid amount.'
         buyEmbed = discord.Embed(title='Shop - Error', description=outputString, colour=conf.colourCoffee)
         await ctx.message.channel.send(embed=buyEmbed)