import asyncio import json import random from typing import Any from redbot.core import bank, commands from redbot.core.data_manager import bundled_data_path Cog: Any = getattr(commands, "Cog", object) class RecyclingPlant(Cog): """Apply for a job at the recycling plant!""" def __init__(self, bot): self.bot = bot self.junk = None def load_junk(self): junk_path = bundled_data_path(self) / "junk.json" with junk_path.open() as json_data: self.junk = json.load(json_data) @commands.command(aliases=["recycle"]) async def recyclingplant(self, ctx: commands.Context): """Apply for a job at the recycling plant!""" if self.junk is None: self.load_junk() x = 0 reward = 0 await ctx.send( "{0} has signed up for a shift at the Recycling Plant! Type ``exit`` to terminate it early.".format( ctx.author.display_name ) ) while x in range(0, 10): used = random.choice(self.junk["can"]) if used["action"] == "trash": opp = "recycle" else: opp = "trash" await ctx.send( "``{}``! Will {} ``trash`` it or ``recycle`` it?".format( used["object"], ctx.author.display_name ) ) def check(m): return m.author == ctx.author and m.channel == ctx.channel try: answer = await self.bot.wait_for("message", timeout=120, check=check) except asyncio.TimeoutError: answer = None if answer is None: await ctx.send( "``{}`` fell down the conveyor belt to be sorted again!".format(used["object"]) ) elif answer.content.lower().strip() == used["action"]: await ctx.send( "Congratulations! You put ``{}`` down the correct chute! (**+50**)".format( used["object"] ) ) reward = reward + 50 x += 1 elif answer.content.lower().strip() == opp: await ctx.send( "{}, you little brute, you put it down the wrong chute! (**-50**)".format( ctx.author.display_name ) ) reward = reward - 50 elif answer.content.lower().strip() == "exit": await ctx.send( "{} has been relived of their duty.".format(ctx.author.display_name) ) break else: await ctx.send( "``{}`` fell down the conveyor belt to be sorted again!".format(used["object"]) ) else: if reward > 0: await bank.deposit_credits(ctx.author, reward) await ctx.send( "{} been given **{} {}s** for your services.".format( ctx.author.display_name, reward, await bank.get_currency_name(ctx.guild) ) )