Old Commit b4 git, using eco4, eco5, eco6.py etc.
This commit is contained in:
commit
6a7ecc3444
4 changed files with 627 additions and 0 deletions
606
eco6.py
Normal file
606
eco6.py
Normal file
|
|
@ -0,0 +1,606 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
import sqlite3
|
||||
import asyncio
|
||||
import random
|
||||
from datetime import datetime, timedelta
|
||||
import time
|
||||
|
||||
# Bot configuration
|
||||
VERSION = "1.3.7"
|
||||
GAMENAME = "BrickRigs"
|
||||
ADMIN_ROLE_ID = 1104093921434402856
|
||||
|
||||
# Shitty code for the bot
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
bot = commands.Bot(command_prefix='*', intents=intents)
|
||||
|
||||
# Database setup
|
||||
db_connection = sqlite3.connect('ecobot.db')
|
||||
db_cursor = db_connection.cursor()
|
||||
|
||||
db_cursor.execute('''CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY,
|
||||
raw_materials INTEGER DEFAULT 0,
|
||||
processed_materials INTEGER DEFAULT 0
|
||||
)''')
|
||||
db_cursor.execute('''CREATE TABLE IF NOT EXISTS factories (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
level INTEGER DEFAULT 1,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
)''')
|
||||
db_cursor.execute('''CREATE TABLE IF NOT EXISTS mines (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
level INTEGER DEFAULT 1,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
)''')
|
||||
db_cursor.execute('''CREATE TABLE IF NOT EXISTS collect_data (
|
||||
user_id INTEGER PRIMARY KEY,
|
||||
last_collect INTEGER
|
||||
)''')
|
||||
db_cursor.execute('''CREATE TABLE IF NOT EXISTS process_data (
|
||||
user_id INTEGER PRIMARY KEY,
|
||||
last_process INTEGER
|
||||
)''')
|
||||
db_connection.commit()
|
||||
|
||||
# Commands
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
print(f'Ecobot V{VERSION} is logged in as {bot.user}!')
|
||||
await bot.change_presence(activity=discord.Game(name=GAMENAME))
|
||||
channel = bot.get_channel(1217238238834589847)
|
||||
|
||||
@bot.command()
|
||||
async def about(ctx):
|
||||
"""Shows information about the bot."""
|
||||
embed=discord.Embed(title=f"Ecobot", color=0x002aff)
|
||||
embed.add_field(name="Creator", value="Der_Eisbear", inline=False)
|
||||
embed.add_field(name="Powered by", value=" Discord.py, SQLite", inline=False)
|
||||
embed.set_footer(text=f"Version: {VERSION}")
|
||||
await ctx.send(embed=embed)
|
||||
#about_message = (
|
||||
# f"# **Ecobot V{VERSION}**\n"
|
||||
# "- **Creator**: Der_Eisbear\n"
|
||||
# "- **Powered by**: Discord.py, SQLite\n"
|
||||
#)
|
||||
#await ctx.send(about_message)
|
||||
|
||||
@bot.command()
|
||||
async def shutdown(ctx):
|
||||
"""Shuts down the bot. (Admin Only)"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send('*You do not have permission to use this command!*')
|
||||
return
|
||||
await ctx.send('Shutting down...')
|
||||
await bot.close()
|
||||
|
||||
@bot.command()
|
||||
async def bal(ctx, member: discord.Member = None):
|
||||
"""Shows the balance of the user."""
|
||||
user = member or ctx.author
|
||||
user_id = user.id
|
||||
|
||||
# Ensure user exists in database
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (user_id,))
|
||||
db_connection.commit()
|
||||
|
||||
# Fetch data
|
||||
db_cursor.execute('SELECT raw_materials, processed_materials FROM users WHERE id = ?', (user_id,))
|
||||
user_data = db_cursor.fetchone()
|
||||
raw_materials, processed_materials = user_data
|
||||
|
||||
db_cursor.execute('SELECT id, level FROM factories WHERE user_id = ?', (user_id,))
|
||||
factories = db_cursor.fetchall()
|
||||
|
||||
db_cursor.execute('SELECT id, level FROM mines WHERE user_id = ?', (user_id,))
|
||||
mines = db_cursor.fetchall()
|
||||
|
||||
# Format response
|
||||
factory_levels = "\n".join([f"ID: {factory[0]} 🏭 Level: {factory[1]}" for factory in factories]) or "None"
|
||||
mine_levels = "\n".join([f"ID: {mine[0]} 🪨 Level: {mine[1]}" for mine in mines]) or "None"
|
||||
|
||||
embed = discord.Embed(title=f"{user.display_name}'s Balance", color=discord.Color.blue())
|
||||
embed.add_field(name="Factories", value=factory_levels, inline=False)
|
||||
embed.add_field(name="Mines", value=mine_levels, inline=False)
|
||||
embed.add_field(name="Raw Materials", value=f"🌾 {raw_materials}", inline=True)
|
||||
embed.add_field(name="Processed Materials", value=f"⚙️ {processed_materials}", inline=True)
|
||||
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def pay(ctx, member: discord.Member, material_type: str, amount: int):
|
||||
"""Pay a user.
|
||||
*pay <@user> <Ore/Mat> <amount>"""
|
||||
user_id = ctx.author.id
|
||||
target_id = member.id
|
||||
|
||||
if material_type.lower() not in ["ore", "mat", "raw"]:
|
||||
await ctx.send("Invalid material type! Use `Ore`, `Raw` or `Mat`.")
|
||||
return
|
||||
|
||||
if material_type.lower() == "ore" or material_type.lower() == "raw":
|
||||
db_column = "raw_materials"
|
||||
emoji = "🌾"
|
||||
mat_name = "raw materials"
|
||||
elif material_type.lower() == "mat":
|
||||
db_column = "processed_materials"
|
||||
emoji = "⚙️"
|
||||
mat_name = "processed materials"
|
||||
|
||||
|
||||
# Ensure both users exist in the database
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (user_id,))
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (target_id,))
|
||||
db_connection.commit()
|
||||
|
||||
# Fetch sender's balance
|
||||
db_cursor.execute(f'SELECT {db_column} FROM users WHERE id = ?', (user_id,))
|
||||
sender_balance = db_cursor.fetchone()[0]
|
||||
|
||||
if sender_balance < amount:
|
||||
embed = discord.Embed(color=discord.Color.red())
|
||||
embed.add_field(name=f":x: Not enough resources!", value = f"You have {sender_balance} {mat_name}!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
return
|
||||
try:
|
||||
# Perform the transaction
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} - ? WHERE id = ?', (amount, user_id))
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} + ? WHERE id = ?', (amount, target_id))
|
||||
db_connection.commit()
|
||||
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f"{ctx.author.display_name}", value = f":white_check_mark: <@{member.id}> has received your {emoji}{amount}")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
except Exception as e:
|
||||
await ctx.send(f"An error occurred during the transaction: {e}")
|
||||
|
||||
|
||||
# Admin Commands
|
||||
@bot.command()
|
||||
async def add(ctx, member: discord.Member, item_type: str, amount: int):
|
||||
"""Adds items to a user. (Admin Only)
|
||||
*add <@user> <ore/mat/factory/mine> <amount/level>"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send("You do not have permission to use this command!")
|
||||
return
|
||||
|
||||
target_id = member.id
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (target_id,))
|
||||
db_connection.commit()
|
||||
|
||||
if item_type.lower() == "ore" or item_type.lower() == "raw":
|
||||
db_column = "raw_materials"
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} + ? WHERE id = ?', (amount, target_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Added {amount} raw materials to <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "mat":
|
||||
db_column = "processed_materials"
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} + ? WHERE id = ?', (amount, target_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Added {amount} processed materials to <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "factory":
|
||||
db_cursor.execute('INSERT INTO factories (user_id, level) VALUES (?, ?)', (target_id, amount))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Added a level {amount} factory to <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "mine":
|
||||
db_cursor.execute('INSERT INTO mines (user_id, level) VALUES (?, ?)', (target_id, amount))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Added a level {amount} mine to <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
else:
|
||||
await ctx.send("Invalid item type! Use `ore`, `raw`, `mat`, `factory` or `mine`.")
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def remove(ctx, member: discord.Member, item_type: str, amount: int):
|
||||
"""Removes resources from a user. (Admin Only)
|
||||
*remove <@user> <ore/mat> <amount>"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send("You do not have permission to use this command!")
|
||||
return
|
||||
|
||||
target_id = member.id
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (target_id,))
|
||||
db_connection.commit()
|
||||
|
||||
if item_type.lower() == "ore" or item_type.lower() == "raw":
|
||||
db_column = "raw_materials"
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} - ? WHERE id = ?', (amount, target_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Removed {amount} raw materials from <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "mat":
|
||||
db_column = "processed_materials"
|
||||
db_cursor.execute(f'UPDATE users SET {db_column} = {db_column} - ? WHERE id = ?', (amount, target_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Removed {amount} processed materials from <@{member.id}>")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
else:
|
||||
await ctx.send("Invalid item type! Use `ore`, `raw` or `mat`.")
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def level(ctx, item_type: str, item_id: int, level: int):
|
||||
"""Upgrades or Downgrades a building (Admin Only)
|
||||
*level <factory/mine> <id> <level>"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send("You do not have permission to use this command!")
|
||||
return
|
||||
|
||||
if item_type.lower() == "factory":
|
||||
db_cursor.execute('UPDATE factories SET level = ? WHERE id = ?', (level, item_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Upgraded factory id {item_id} to level {level}!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "mine":
|
||||
db_cursor.execute('UPDATE mines SET level = ? WHERE id = ?', (level, item_id))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Upgraded mine id {item_id} to level {level}!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
@bot.command()
|
||||
async def removeb(ctx, item_type: str, item_id: int):
|
||||
"""Removes buildings from a user (Admin Only)
|
||||
*removeb <mine/factory> <id>"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send("You do not have permission to use this command!")
|
||||
return
|
||||
|
||||
|
||||
if item_type.lower() == "factory":
|
||||
db_cursor.execute('DELETE FROM factories WHERE id = ?', (item_id,))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Removed factory id {item_id}!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
|
||||
elif item_type.lower() == "mine":
|
||||
db_cursor.execute('DELETE FROM mines WHERE id = ?', (item_id,))
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=f":white_check_mark:", value = f"Removed mine id {item_id}!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
else:
|
||||
await ctx.send("Invalid item type! Use `mine` or `factory`.")
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def drop(ctx):
|
||||
"""Removes all data from the table (Admin Only)
|
||||
*drop"""
|
||||
if ADMIN_ROLE_ID not in [role.id for role in ctx.author.roles]:
|
||||
await ctx.send("You do not have permission to use this command!")
|
||||
return
|
||||
|
||||
embed = discord.Embed(color = discord.Color.orange(), title="Confirmation Needed")
|
||||
embed.add_field(name="Confirm your actions:", value = "Are you sure you want to delete all data in the table? This can not be undone. To confirm, press the button within the next 1 minute.")
|
||||
|
||||
message = await ctx.send(embed=embed, view = discord.ui.View(timeout = 60).add_item(discord.ui.Button(label = "Confirm", style = discord.ButtonStyle.green)))
|
||||
|
||||
def check(i):
|
||||
return i.user == ctx.author and i.message == message
|
||||
|
||||
try:
|
||||
interaction = await bot.wait_for("interaction", check=check, timeout = 60)
|
||||
db_cursor.execute('DELETE FROM users;')
|
||||
db_cursor.execute('DELETE FROM factories;')
|
||||
db_cursor.execute('DELETE FROM mines;')
|
||||
db_cursor.execute('DELETE FROM collect_data;')
|
||||
db_cursor.execute('DELETE FROM process_data;')
|
||||
db_connection.commit()
|
||||
embed = discord.Embed(color=discord.Color.green())
|
||||
embed.add_field(name=":white_check_mark:", value="Successfully dropped all data from table!")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await interaction.response.edit_message(embed=embed, view = None)
|
||||
except asyncio.TimeoutError:
|
||||
embed = discord.Embed(color=discord.Color.red())
|
||||
embed.add_field(name=":x:", value = "No confirmation has been given. Deletion aborted.")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await message.edit(embed=embed, view=None)
|
||||
|
||||
@bot.command()
|
||||
async def collect(ctx):
|
||||
"""Collects resources from mines (Once every 24 hours)"""
|
||||
user_id = ctx.author.id
|
||||
embed = discord.Embed()
|
||||
# Ensure user exists in database
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (user_id,))
|
||||
#db_connection.commit()
|
||||
|
||||
db_cursor.execute('SELECT last_collect FROM collect_data WHERE user_id = ?', (user_id,))
|
||||
last_collect_data = db_cursor.fetchone()
|
||||
if last_collect_data:
|
||||
last_collect = last_collect_data[0]
|
||||
else:
|
||||
last_collect = 0
|
||||
|
||||
db_cursor.execute('SELECT level FROM mines WHERE user_id = ?', (user_id,))
|
||||
mines = db_cursor.fetchall()
|
||||
if not mines:
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="You do not own any mines to collect from.", value="\u200b") # Add a zero-width space for formatting.
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
return
|
||||
|
||||
time_since_collect = int(time.time()) - last_collect
|
||||
current_time = int(time.time())
|
||||
|
||||
if time_since_collect < 24 * 3600:
|
||||
next_collect = last_collect + 24 * 3600
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name=f"You can collect again at <t:{next_collect}:R>", value="\u200b")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
return
|
||||
|
||||
db_cursor.execute('SELECT id, level FROM mines WHERE user_id = ?', (user_id,)) # Fetch ID too
|
||||
mines = db_cursor.fetchall()
|
||||
|
||||
if not mines:
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="No Mines", value="You do not own any mines to collect from.")
|
||||
await ctx.send(embed=embed)
|
||||
return
|
||||
|
||||
# --- Calculate Production ---
|
||||
total_ore_collected = 0
|
||||
collected_from_mines = [] # Optional: To list details
|
||||
|
||||
for mine_id, mine_level in mines:
|
||||
if mine_level <= 0: # Skip invalid mines
|
||||
continue
|
||||
# Calculate ore: 1 to level * 2 (inclusive)
|
||||
ore_produced = random.randint(1, mine_level * 2)
|
||||
total_ore_collected += ore_produced
|
||||
collected_from_mines.append(f"Mine ID {mine_id} (Lvl {mine_level}): +{ore_produced} 🌾")
|
||||
|
||||
# --- Update Database ---
|
||||
if total_ore_collected > 0:
|
||||
try:
|
||||
db_cursor.execute('UPDATE users SET raw_materials = raw_materials + ? WHERE id = ?', (total_ore_collected, user_id))
|
||||
db_cursor.execute('INSERT OR REPLACE INTO collect_data (user_id, last_collect) VALUES (?, ?)', (user_id, current_time))
|
||||
db_connection.commit()
|
||||
|
||||
embed.color = discord.Color.green()
|
||||
embed.add_field(name="Collection Successful!", value=f"You collected a total of **{total_ore_collected}** 🌾 raw materials.", inline=False)
|
||||
# Optional: Add details field
|
||||
# if collected_from_mines:
|
||||
# details = "\n".join(collected_from_mines)
|
||||
# embed.add_field(name="Details", value=f"```{details}```", inline=False)
|
||||
|
||||
except sqlite3.Error as e:
|
||||
db_connection.rollback()
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="Database Error", value=f"Could not save collection data: {e}")
|
||||
except Exception as e:
|
||||
db_connection.rollback()
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="Unexpected Error", value=f"An error occurred: {e}")
|
||||
else:
|
||||
# This case should only happen if all mines had level 0 or less
|
||||
embed.color = discord.Color.orange()
|
||||
embed.add_field(name="No Materials Collected", value="Your mines produced no materials this cycle (maybe they are level 0?).", inline=False)
|
||||
# Still update cooldown even if nothing was collected
|
||||
try:
|
||||
db_cursor.execute('INSERT OR REPLACE INTO collect_data (user_id, last_collect) VALUES (?, ?)', (user_id, current_time))
|
||||
db_connection.commit()
|
||||
except sqlite3.Error as e:
|
||||
print(f"DB Error updating cooldown after 0 collection: {e}") # Log error
|
||||
db_connection.rollback()
|
||||
|
||||
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@bot.command()
|
||||
async def process(ctx):
|
||||
"""Processes raw materials into processed materials (Once every 24 hours)"""
|
||||
user_id = ctx.author.id
|
||||
embed = discord.Embed()
|
||||
|
||||
db_cursor.execute('INSERT OR IGNORE INTO users (id) VALUES (?)', (user_id,))
|
||||
db_connection.commit()
|
||||
db_cursor.execute('SELECT last_process FROM process_data WHERE user_id = ?', (user_id,))
|
||||
last_process_data = db_cursor.fetchone()
|
||||
if last_process_data:
|
||||
last_process = last_process_data[0]
|
||||
else:
|
||||
last_process = 0
|
||||
|
||||
db_cursor.execute('SELECT level FROM factories WHERE user_id = ?', (user_id,))
|
||||
factories = db_cursor.fetchall()
|
||||
if not factories:
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="You do not own any factories to process raw resources.", value="\u200b")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
return
|
||||
|
||||
time_since_process = int(time.time()) - last_process
|
||||
if time_since_process < 24 * 3600:
|
||||
next_process = last_process + 24 * 3600
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name=f"You can process again <t:{next_process}:R>", value="\u200b")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
return
|
||||
|
||||
db_cursor.execute('SELECT raw_materials FROM users WHERE id = ?', (user_id,))
|
||||
user_data = db_cursor.fetchone()
|
||||
raw_materials = user_data[0]
|
||||
total_mat = 0
|
||||
|
||||
for factory in factories:
|
||||
factory_level = factory[0]
|
||||
|
||||
if raw_materials <= 0:
|
||||
embed.color = discord.Color.red()
|
||||
embed.add_field(name="Not enough Raw Materials!", value=f"You need more raw materials to process. You currently have {raw_materials}.")
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed = embed)
|
||||
return
|
||||
|
||||
if factory_level == 1:
|
||||
processed_amount = random.randint(10, 30)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 7:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline = False)
|
||||
|
||||
if random.random() < 0.10:
|
||||
db_cursor.execute('DELETE FROM factories WHERE user_id = ? AND level = 1', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Factory Collapsed!", value="Your level 1 factory has suffered catastrophic damage! It has been removed!", inline = False)
|
||||
break # Stop processing if factory breaks
|
||||
elif factory_level == 2:
|
||||
processed_amount = random.randint(20, 50)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
elif factory_level == 3:
|
||||
processed_amount = random.randint(40, 80)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
rand = random.random()
|
||||
if rand < 0.05:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 2 WHERE user_id = ? AND level = 3', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Downgrade!", value="Your level 3 factory has lost efficiency, reducing it to level 2.", inline=False)
|
||||
elif rand < 0.001:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 4 WHERE user_id = ? AND level = 3', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Upgrade!", value="Your level 3 factory has had an efficiency upgrade, increasing it to level 4.", inline=False)
|
||||
elif factory_level == 4:
|
||||
processed_amount = random.randint(50, 90)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
|
||||
elif factory_level == 5:
|
||||
processed_amount = random.randint(60, 110)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
|
||||
rand = random.random()
|
||||
|
||||
if rand < 0.10:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 4 WHERE user_id = ? AND level = 5', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Downgrade!", value="Your level 5 factory has lost efficiency, reducing it to level 4.", inline=False)
|
||||
|
||||
elif rand < 0.01:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 3 WHERE user_id = ? AND level = 5', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Downgrade!", value="Your level 5 factory has lost efficiency, reducing it to level 3.", inline=False)
|
||||
elif rand < 0.08:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 6 WHERE user_id = ? AND level = 5', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Upgrade!", value="Your level 5 factory has had an efficiency upgrade, increasing it to level 6!", inline=False)
|
||||
|
||||
|
||||
elif factory_level == 6:
|
||||
processed_amount = random.randint(70, 120)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
elif factory_level == 7:
|
||||
processed_amount = random.randint(80, 130)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name = "Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
|
||||
elif factory_level == 8:
|
||||
processed_amount = random.randint(100, 150)
|
||||
mat = processed_amount // 10
|
||||
if processed_amount % 10 > 5:
|
||||
mat += 1
|
||||
embed.add_field(name="Bonus!", value="Your factory produced some bonus materials!", inline=False)
|
||||
if random.random() < 0.0001:
|
||||
db_cursor.execute(f'UPDATE factories SET level = 7 WHERE user_id = ? AND level = 8', (user_id,))
|
||||
db_connection.commit()
|
||||
embed.add_field(name="Downgrade!", value="Your level 8 factory has lost efficiency, reducing it to level 7.", inline=False)
|
||||
else:
|
||||
mat = 0
|
||||
|
||||
raw_materials -= mat
|
||||
total_mat += mat
|
||||
|
||||
db_cursor.execute('UPDATE users SET raw_materials = ? WHERE id = ?', (raw_materials, user_id))
|
||||
db_cursor.execute('UPDATE users SET processed_materials = processed_materials + ? WHERE id = ?', (total_mat, user_id))
|
||||
db_connection.commit()
|
||||
now = int(time.time())
|
||||
db_cursor.execute('INSERT OR REPLACE INTO process_data (user_id, last_process) VALUES (?,?)', (user_id, now))
|
||||
db_connection.commit()
|
||||
embed.color = discord.Color.green()
|
||||
embed.add_field(name=f"You processed {total_mat} raw resources into processed resources.", value="\u200b", inline=False) # Zero-width space for formatting
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@bot.event
|
||||
async def on_command_error(ctx, error):
|
||||
if isinstance(error, commands.MissingRequiredArgument):
|
||||
await ctx.send(f"You're missing an argument, please check usage using *cmds {ctx.command.name}")
|
||||
elif isinstance(error, commands.BadArgument):
|
||||
await ctx.send(f"Invalid argument. Please check the order using *cmds {ctx.command.name}")
|
||||
elif isinstance(error, commands.CommandNotFound):
|
||||
await ctx.send(f"Command was not found. Please use *cmds for a list of all available commands.")
|
||||
else:
|
||||
print(f"An unhandled error occurred: {error}")
|
||||
await ctx.send("An unexpected error occurred. Please check the console or notify the administrator.")
|
||||
|
||||
@bot.command(name="cmds")
|
||||
async def cmds(ctx):
|
||||
embed = discord.Embed(title="Available Commands", color=discord.Color.purple())
|
||||
for command in bot.commands:
|
||||
if not command.hidden:
|
||||
embed.add_field(name=f"*{command.name}", value=f"{command.help or 'No description available.'}", inline=False)
|
||||
embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
|
||||
# Run bot
|
||||
with open('token.txt', 'r') as file:
|
||||
token = file.read().strip()
|
||||
|
||||
bot.run(token)
|
||||
BIN
ecobot.db
Normal file
BIN
ecobot.db
Normal file
Binary file not shown.
20
requirements.txt
Normal file
20
requirements.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
aiohappyeyeballs==2.4.4
|
||||
aiohttp==3.11.11
|
||||
aiosignal==1.3.2
|
||||
aiosqlite==0.20.0
|
||||
attrs==24.3.0
|
||||
blinker==1.9.0
|
||||
click==8.1.8
|
||||
colorama==0.4.6
|
||||
discord.py==2.4.0
|
||||
Flask==3.1.0
|
||||
frozenlist==1.5.0
|
||||
idna==3.10
|
||||
itsdangerous==2.2.0
|
||||
Jinja2==3.1.5
|
||||
MarkupSafe==3.0.2
|
||||
multidict==6.1.0
|
||||
propcache==0.2.1
|
||||
typing_extensions==4.12.2
|
||||
Werkzeug==3.1.3
|
||||
yarl==1.18.3
|
||||
1
token.txt
Normal file
1
token.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
MTA5Mzc0MTc3MDY0NDM5ODIxMA.GYydsS.Rb2wc-e-BlhNlAj5VTEyA5Ycb4YA2ytrmvTIA8
|
||||
Loading…
Add table
Add a link
Reference in a new issue