152 lines
7.6 KiB
Python
152 lines
7.6 KiB
Python
import discord
|
|
from discord.ext import commands
|
|
|
|
|
|
class BotManager:
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
@commands.command()
|
|
async def invite(self, bot_id :discord.Member = None, prefix = None)
|
|
em = discord.Embed()
|
|
|
|
if not bot:
|
|
raise Warning('You must include the id of the bot you are trying to invite... Be exact.')
|
|
if not bot.bot:
|
|
raise Warning('You can only invite bots.')
|
|
if not prefix:
|
|
raise Warning('Please provide a prefix')
|
|
|
|
em.name("Hello {},".format(ctx.author.name))
|
|
em.description("Thanks for inviting your bot! It will be tested and invited shortly. Please open your DMs if they are not already so the bot can contact you to inform you about the progress of the bot!")
|
|
em.colour(self.bot.embed_color)
|
|
await ctx.send(embed = em)
|
|
|
|
em = discord.Embed()
|
|
em.colour(discord.Color(0x363941))
|
|
em.set_thumbnail(url=ctx.author.avatar_url)
|
|
em.add_field(name="Bot name", value=to_invite.name)
|
|
em.add_field(name="Bot id", value="`" + str(to_invite.id) + "`")
|
|
em.add_field(name="Bot owner", value=message.author.mention)
|
|
em.add_field(name="Bot prefix", value="`" + splitted_message[1] + "`")
|
|
await ctx.bot.get_channe(448803675574370304).send(embed = em)
|
|
|
|
@commands.command(name='claim', aliases=['makemine', 'gimme'])
|
|
@commands.cooldown(1, 5, commands.BucketType.user)
|
|
async def _claim_bot(self, ctx, bot: discord.Member=None, prefix: str=None, owner : discord.Member =None):
|
|
if not bot:
|
|
raise Warning('You must include the name of the bot you are trying to claim... Be exact.')
|
|
if not bot.bot:
|
|
raise Warning('You can only claim bots.')
|
|
if not prefix:
|
|
if bot.display_name.startswith('['):
|
|
prefix = bot.display_name.split(']')[0].strip('[')
|
|
else:
|
|
raise Warning('Prefix not provided and can\'t be found in bot name.')
|
|
|
|
if owner != None and ctx.author.guild_permissions.manage_guild:
|
|
author_id = owner.id
|
|
else:
|
|
author_id = ctx.author.id
|
|
em = discord.Embed()
|
|
|
|
if await self.bot.db_con.fetchval('select count(*) from bots where owner = $1', author_id) >= 10:
|
|
em.colour = self.bot.error_color
|
|
em.title = 'Too Many Bots Claimed'
|
|
em.description = 'Each person is limited to claiming 10 bots as that is how ' \
|
|
'many bots are allowed by the Discord API per user.'
|
|
return await ctx.send(embed=em)
|
|
existing = await self.bot.db_con.fetchrow('select * from bots where id = $1', bot.id)
|
|
if not existing:
|
|
await self.bot.db_con.execute('insert into bots (id, owner, prefix) values ($1, $2, $3)',
|
|
bot.id, author_id, prefix)
|
|
em.colour = self.bot.embed_color
|
|
em.title = 'Bot Claimed'
|
|
em.description = f'You have claimed {bot.display_name} with a prefix of {prefix}\n' \
|
|
f'If there is an error please run command again to correct the prefix,\n' \
|
|
f'or {ctx.prefix}unclaim {bot.mention} to unclaim the bot.'
|
|
elif existing['owner'] and existing['owner'] != author_id:
|
|
em.colour = self.bot.error_color
|
|
em.title = 'Bot Already Claimed'
|
|
em.description = 'This bot has already been claimed by someone else.\n' \
|
|
'If this is actually your bot please let the guild Administrators know.'
|
|
elif existing['owner'] and existing['owner'] == author_id:
|
|
em.colour = self.bot.embed_color
|
|
em.title = 'Bot Already Claimed'
|
|
em.description = 'You have already claimed this bot.\n' \
|
|
'If the prefix you provided is different from what is already in the database' \
|
|
' it will be updated for you.'
|
|
if existing['prefix'] != prefix:
|
|
await self.bot.db_con.execute("update bots set prefix = $1 where id = $2", prefix, bot.id)
|
|
elif not existing['owner']:
|
|
await self.bot.db_con.execute('update bots set owner = $1, prefix = $2 where id = $3',
|
|
author_id, prefix, bot.id)
|
|
em.colour = self.bot.embed_color
|
|
em.title = 'Bot Claimed'
|
|
em.description = f'You have claimed {bot.display_name} with a prefix of {prefix}\n' \
|
|
f'If there is an error please run command again to correct the prefix,\n' \
|
|
f'or {ctx.prefix}unclaim {bot.mention} to unclaim the bot.'
|
|
else:
|
|
em.colour = self.bot.error_color
|
|
em.title = 'Something Went Wrong...'
|
|
await ctx.send(embed=em)
|
|
|
|
@commands.command(name='unclaim')
|
|
@commands.cooldown(1, 5, commands.BucketType.user)
|
|
async def _unclaim_bot(self, ctx, bot: discord.Member=None):
|
|
if not bot:
|
|
raise Warning('You must include the name of the bot you are trying to claim... Be exact.')
|
|
if not bot.bot:
|
|
raise Warning('You can only unclaim bots.')
|
|
|
|
em = discord.Embed()
|
|
|
|
existing = await self.bot.db_con.fetchrow('select * from bots where id = $1', bot.id)
|
|
if not existing or not existing['owner']:
|
|
em.colour = self.bot.error_color
|
|
em.title = 'Bot Not Found'
|
|
em.description = 'That bot is not claimed'
|
|
elif existing['owner'] != ctx.author.id and not ctx.author.guild_permissions.manage_guild:
|
|
em.colour = self.bot.error_color
|
|
em.title = 'Not Claimed By You'
|
|
em.description = 'That bot is claimed by someone else.\n' \
|
|
'You can\'t unclaim someone else\'s bot'
|
|
else:
|
|
await self.bot.db_con.execute('update bots set owner = null where id = $1', bot.id)
|
|
em.colour = self.bot.embed_color
|
|
em.title = 'Bot Unclaimed'
|
|
em.description = f'You have unclaimed {bot.display_name}\n' \
|
|
f'If this is an error please reclaim using\n' \
|
|
f'{ctx.prefix}claim {bot.mention} {existing["prefix"]}'
|
|
await ctx.send(embed=em)
|
|
|
|
@commands.command(name='listclaims', aliases=['claimed', 'mybots'])
|
|
@commands.cooldown(1, 5, commands.BucketType.user)
|
|
async def _claimed_bots(self, ctx, usr: discord.Member=None):
|
|
if usr is None:
|
|
usr = ctx.author
|
|
bots = await self.bot.db_con.fetch('select * from bots where owner = $1', usr.id)
|
|
if bots:
|
|
em = discord.Embed(title=f'{usr.display_name} has claimed the following bots:',
|
|
colour=self.bot.embed_color)
|
|
for bot in bots:
|
|
member = ctx.guild.get_member(int(bot['id']))
|
|
em.add_field(name=member.display_name, value=f'Stored Prefix: {bot["prefix"]}', inline=False)
|
|
else:
|
|
em = discord.Embed(title='You have not claimed any bots.',
|
|
colour=self.bot.embed_color)
|
|
await ctx.send(embed=em)
|
|
|
|
@commands.command(name='whowns')
|
|
async def _whowns(self, ctx, bot: discord.Member):
|
|
if not bot.bot:
|
|
await ctx.send('this commands only for bots')
|
|
else:
|
|
owner = await self.bot.db_con.fetchrow('select * from bots where id = $1', bot.id)
|
|
await ctx.send(ctx.guild.get_member(owner['owner']).display_name)
|
|
|
|
|
|
|
|
def setup(bot):
|
|
bot.add_cog(BotManager(bot))
|