from discord.ext import commands from GeoffreyApp.assets.bots.discord_bot.DiscordHelperFunctions import * class Search_Commands: """ Commands to find stuff. """ def __init__(self, bot): self.bot = bot @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def find(self, ctx, *args): """ Finds all the locations matching the search term ?find [Search] """ search = get_name(args) if search is None: raise commands.UserInputError result = self.bot.run_command("find_location", {"search": search}) await ctx.send( '{}, The following entries match **{}**:\n{}'.format(ctx.message.author.mention, search, result)) @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def tunnel(self, ctx, player: str): """ Finds all the tunnels a player owns ?tunnel [Player] """ result = self.bot.run_command("tunnel", {"player_name": player}) await ctx.send( '{}, **{}** owns the following tunnel(s): \n{}'.format(ctx.message.author.mention, player, result)) @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def find_around(self, ctx, x_pos: int, z_pos: int, *args): """ Finds all the locations around a certain point. The radius defaults to 200 blocks if no value is given Default dimension is the overworld ?find_around [X Coordinate] [Z Coordinate] [Radius] """ radius = 200 dimension = 'Overworld' if len(args) > 0: radius = int(args[0]) base_string = self.bot.run_command("find_around", {"x_pos": x_pos, "z_pos": z_pos}) if len(base_string) != 0: await ctx.send('{}, the following locations(s) are within **{}** blocks of that point: \n {}'.format( ctx.message.author.mention, radius, base_string)) else: await ctx.send('{}, there are no locations within {} blocks of that point' .format(ctx.message.author.mention, radius)) @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def selling(self, ctx, *args): """ Lists all the shops selling an item ?selling [item] """ item_name = get_name(args) result = self.bot.run_command("selling", {"item_name": item_name}) item_listings = [] for item in result: item_str = "{} {} for {}D".format(item["amount"], item["item_name"], item["price"]) item_listings.append(item_str) await ctx.send( '{}, the following shop(s) sell **{}**: \n{}'.format(ctx.message.author.mention, item_name, item_listings)) @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def info(self, ctx, *args): """ Displays info about a location. If the location is a shop, it displays the shop's inventory ?info [Location Name] """ loc = get_name(args) info_str = self.bot.run_command("info", {"location_name": loc}) await ctx.send(info_str) @commands.command(pass_context=True) @commands.cooldown(5, 60, commands.BucketType.user) async def me(self, ctx): """ Displays all your locations in the database """ loc_str = self.bot.run_command("info", {"discord_uuid": ctx.message.author.id}) await ctx.send('{}, here are your location(s) in the database: \n {}'.format(ctx.message.author.mention, loc_str)) def setup(bot): bot.add_cog(Search_Commands(bot))