116 lines
3.8 KiB
Python
116 lines
3.8 KiB
Python
|
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))
|