Ejemplo n.º 1
0
    async def ban(self, ctx, userin, *, reason=None):
        user = formatting.get_from_in(self.bot, ctx, "use", userin)
        member = formatting.get_from_in(self.bot, ctx, "mem", userin)
        verified = ctx.guild.get_role(settings.VERIFIED_ROLE_ID)
        staff = ctx.guild.get_role(settings.STAFF_ROLE_ID)

        try:
            if staff not in ctx.author.roles and verified in member.roles:
                await ctx.send(
                    content=
                    'Interviewers cannot target Verified users with this command'
                )
                return
        except AttributeError:
            pass

        embed = discord.Embed(title='Server Ban', color=0xff6464)
        embed.set_author(name=f'{user.name}#{user.discriminator}',
                         icon_url=user.avatar_url)
        embed.add_field(name='Target', value=user.mention, inline=True)
        embed.add_field(name='Moderator',
                        value=ctx.author.mention,
                        inline=True)
        embed.timestamp = ctx.message.created_at

        if reason:
            embed.add_field(name='Reason', value=reason, inline=False)
            await ctx.guild.ban(user, reason=reason, delete_message_days=0)
        else:
            embed.add_field(name='Reason', value='none', inline=False)
            await ctx.guild.ban(user, reason='none', delete_message_days=0)

        await ctx.send(embed=embed)
Ejemplo n.º 2
0
    async def say(self, ctx, channel, *, msg):
        channel = formatting.get_from_in(self.bot, ctx, "cha", channel)
        log_channel = self.bot.get_channel(int(settings.SAY_LOG_ID))

        if ctx.author.permissions_in(channel).send_messages:
            if len(
                    ctx.message.role_mentions
            ) != 0 or '@everyone' in msg or '@here' in msg:  #checking if there are any mentions in the message
                await ctx.send(
                    content='You cannot mention roles with this command')
                return
            else:
                await log_channel.send(
                    f'__{ctx.message.author.name}:__ {msg} **in** *{channel.name}*'
                )
                await channel.send(f'{msg}')

            try:
                await ctx.message.delete()

            except discord.Forbidden:
                pass
        else:
            await ctx.send(
                f'You\'re only allowed to use this command in channels you may speak in! You can\'t speak in **{channel.name}**'
            )
Ejemplo n.º 3
0
    async def cleanupgen(self, ctx, role):
        role = formatting.get_from_in(self.bot, ctx, "rol", role)
        member_list = role.members
        cleanup_file = open(settings.CLEANUP_PATH, 'w+')
        i = 0

        with open(settings.CLEANUP_PATH, 'w+') as cleanup_file:
            cleanup_file.write('Member, Id, Joined, Last seen, Nitro\n')
            for member in member_list:
                db = TinyDB(settings.DB_PATH + str(member.id) + '.json')
                table = db.table('information')

                name = member.name.encode(encoding="ascii", errors="replace")
                member_id = member.id
                joined = member.joined_at
                try:
                    last_seen = table.get(doc_id=1)['last_seen']
                except:
                    last_seen = 'N/A'
                nitro = member.premium_since

                cleanup_file.write(
                    f'{name}, "{member_id}", {joined}, {last_seen}, {nitro}\n')
        await ctx.send(
            content=
            f'Please see the console. There were {len(member_list)} user(s)',
            file=discord.File(fp=settings.CLEANUP_PATH,
                              filename=settings.CLEANUP_PATH))
Ejemplo n.º 4
0
    async def createqueue(self, ctx, *, string):
        user_ids = []
        id_build = ''
        string = string + '-'  #can't add the final id without a space so we append some other symbol that we also check for instead

        for char in string:

            if char == ' ' or char == '-':
                user_ids.append(id_build)
                id_build = ''
            else:
                id_build = id_build + char

        self.queue = '```\nQueue--\n'
        self.queue_position = 1

        for user in user_ids:
            user = formatting.get_from_in(self.bot, ctx, "use", user)

            self.queue = self.queue + f'{self.queue_position}. {user.name}#{user.discriminator}\n'
            self.queue_position = self.queue_position + 1

        self.queue = self.queue + '```'

        await ctx.message.delete()
        await ctx.send(f'{self.queue}')
Ejemplo n.º 5
0
    async def welcome(self, ctx, *, member):
        member = formatting.get_from_in(self.bot, ctx, "mem", member)
        unverified_role = ctx.guild.get_role(settings.UNVERIFIED_ROLE_ID)
        verified_role = ctx.guild.get_role(settings.VERIFIED_ROLE_ID)

        await member.remove_roles(unverified_role, reason='user verified')
        await member.add_roles(verified_role, reason='user verified')

        try:
            await member.create_dm()
            await member.dm_channel.send(settings.WELCOME1)
            await member.dm_channel.send(settings.WELCOME2)
        except discord.Forbidden:
            bot_commands = self.bot.get_channel(settings.BOT_COMMANDS_ID)
            await bot_commands.send(
                content=f'{member.mention}\n{settings.WELCOME1}')
            await bot_commands.send(
                content=f'{member.mention}\n{settings.WELCOME2}')

        general = self.bot.get_channel(settings.GENERAL_ID)

        embed = discord.Embed(
            description=f'Welcome to the server {member.mention}!',
            color=0x64b4ff)
        embed.set_author(name=f'{member.name}#{member.discriminator}',
                         icon_url=member.avatar_url)
        embed.timestamp = ctx.message.created_at

        await general.send(content='@here', embed=embed)
Ejemplo n.º 6
0
    async def avatar(self, ctx, user):
        user = formatting.get_from_in(self.bot, ctx, "use", user)

        embed = discord.Embed(title='Avatar', color=0x64b4ff)
        embed.set_author(name=f'{user.name}#{user.discriminator}',
                         icon_url=user.avatar_url)
        embed.set_image(url=user.avatar_url_as(static_format='png'))
        embed.timestamp = ctx.message.created_at

        await ctx.send(embed=embed)
Ejemplo n.º 7
0
    async def say_dm(self, ctx, user, *, message):
        user = formatting.get_from_in(self.bot, ctx, "use", user)

        await user.create_dm()
        try:
            await user.dm_channel.send(message)
        except discord.Forbidden:
            await ctx.send('I cannot send messages to this user')

        emote = self.bot.get_emoji(790040369400250388)
        await ctx.message.add_reaction(emote)
Ejemplo n.º 8
0
    async def unban(self, ctx, user):
        user = formatting.get_from_in(self.bot, ctx, "use", user)

        embed = discord.Embed(title='Server Unban', color=0x64ff64)
        embed.set_author(name=f'{user.name}#{user.discriminator}',
                         icon_url=user.avatar_url)
        embed.add_field(name='Target', value=user.mention, inline=True)
        embed.add_field(name='Moderator',
                        value=ctx.author.mention,
                        inline=True)
        embed.timestamp = ctx.message.created_at

        await ctx.guild.unban(user)
        await ctx.send(embed=embed)
Ejemplo n.º 9
0
    async def pardon(self, ctx, member):
        member = formatting.get_from_in(self.bot, ctx, 'mem', member)
        try:
            self.warnings.remove(member.id)
        except ValueError:  #They gotta be in one of the arrays if we're at this point in the code.
            pass
        embed = discord.Embed(
            description=f'**{member.mention} has had their warnings removed**',
            color=0x64ff64)
        embed.set_author(name=f'{member.name}#{member.discriminator}',
                         icon_url=member.avatar_url)
        embed.set_thumbnail(url=member.avatar_url)
        embed.timestamp = ctx.message.created_at

        await ctx.send(embed=embed)
Ejemplo n.º 10
0
    async def howmany(self, ctx, role):
        role = formatting.get_from_in(self.bot, ctx, "rol", role)

        i = 0

        for member in role.members:
            i = i + 1

        embed = discord.Embed(title='How Many', color=0x64b4ff)
        embed.set_author(name=f'{ctx.author.name}#{ctx.author.discriminator}',
                         icon_url=f'{ctx.author.avatar_url}')
        embed.add_field(name='Role', value=f'{role.mention}')
        embed.add_field(name='Users', value=f'{i}')
        embed.timestamp = ctx.message.created_at

        await ctx.send(embed=embed)
Ejemplo n.º 11
0
    async def whoin(self, ctx, role):
        role = formatting.get_from_in(self.bot, ctx, "rol", role)
        members = ''

        for member in role.members:
            members = members + f'{member.name}#{member.discriminator}, '

        embed = discord.Embed(title='Who In', color=0x64b4ff)
        embed.set_author(name=f'{ctx.author.name}#{ctx.author.discriminator}',
                         icon_url=f'{ctx.author.avatar_url}')
        embed.add_field(name='Role', value=f'{role.mention}', inline=False)
        embed.add_field(name='Users', value=f'{members[0:-1]}')
        embed.timestamp = ctx.message.created_at

        try:
            await ctx.send(embed=embed)
        except discord.HTTPException:
            await ctx.send(
                f'**Error:** Too many users (or none) have this role to send the message through discord. Consider using ,cleanupgen instead'
            )
Ejemplo n.º 12
0
    async def timeout(self, ctx, user, duration):
        member = formatting.get_from_in(self.bot, ctx, 'mem', user)
        verified = ctx.guild.get_role(settings.VERIFIED_ROLE_ID)
        staff = ctx.guild.get_role(settings.STAFF_ROLE_ID)

        if staff not in ctx.author.roles and verified in member.roles:
            await ctx.send(
                content=
                'Interviewers cannot target Verified users with this command')
        else:

            role = ctx.guild.get_role(settings.MUTED_ROLE_ID)

            mute_embed = discord.Embed(
                description=
                f'**{member.mention} was timed out for {duration} minute(s)**',
                color=0xff6464)
            mute_embed.set_author(name=f'{member.name}#{member.discriminator}',
                                  icon_url=member.avatar_url)
            mute_embed.set_thumbnail(url=member.avatar_url)
            mute_embed.timestamp = ctx.message.created_at

            await member.add_roles(role,
                                   reason='timeout command: timing out user',
                                   atomic=True)
            await ctx.send(embed=mute_embed)

            await asyncio.sleep(60 * int(duration))

            unmute_embed = discord.Embed(
                description=f'**{member.mention} is no longer timed out**',
                color=0x64ff64)
            unmute_embed.set_author(
                name=f'{member.name}#{member.discriminator}',
                icon_url=member.avatar_url)
            unmute_embed.set_thumbnail(url=member.avatar_url)
            unmute_embed.timestamp = ctx.message.created_at

            await member.remove_roles(
                role, reason='timeout command: removing timeout', atomic=True)
            await ctx.send(embed=unmute_embed)
Ejemplo n.º 13
0
    async def emote(self, ctx, emote):
        try:
            emote = formatting.get_from_in(self.bot, ctx, "emo", emote)
        except TypeError:
            await ctx.send(content='Please select an emote from this server')
            return
        path = settings.DB_PATH + str(ctx.author.id) + '.json'
        db = TinyDB(path)
        table = db.table('boost')
        member = Query()

        try:
            emote_id = table.get(member.emote_id != None)['emote_id']
        except TypeError:
            #make the emote portion in the DB
            db = TinyDB(path)
            member = Query()
            table = db.table('boost')

            try:
                table.upsert({'emote_id': emote.id}, member.emote_id != None)
            except AttributeError:
                await ctx.send(
                    content='Please select an emote from this server')
                return

            formatting.fancify(path)

            emote_id = table.get(member.emote_id != None)['emote_id']

        try:
            if emote_id != emote.id:
                table.upsert({'emote_id': emote.id}, member.emote_id != None)
        except AttributeError:
            await ctx.send(content='Please select an emote from this server')
            return

        await ctx.send(content=f'{emote}\nHere\'s your new auto-react emote!')
Ejemplo n.º 14
0
    async def kick(self, ctx, member, *, reason=None):
        member = formatting.get_from_in(self.bot, ctx, "mem", member)

        verified = ctx.guild.get_role(settings.VERIFIED_ROLE_ID)
        staff = ctx.guild.get_role(settings.STAFF_ROLE_ID)
        if staff not in ctx.author.roles and verified in member.roles:
            await ctx.send(
                content=
                'Interviewers cannot target Verified users with this command')

        else:
            embed = discord.Embed(title='Server Kick', color=0xff6464)
            embed.set_author(name=f'{member.name}#{member.discriminator}',
                             icon_url=member.avatar_url)
            embed.add_field(name='Target', value=member.mention, inline=True)
            embed.add_field(name='Moderator',
                            value=ctx.author.mention,
                            inline=True)
            embed.timestamp = ctx.message.created_at

            try:
                await member.create_dm()
                await member.dm_channel.send(
                    content=
                    f'You have been kicked from {ctx.guild.name} with reason: __{reason}__'
                )
            except discord.Forbidden:
                embed.add_field(value='Unable to DM target', inline=True)

            if reason:
                embed.add_field(name='Reason', value=reason, inline=False)
                await member.kick(reason=reason)
            else:
                embed.add_field(name='Reason', value='none', inline=False)
                await member.kick(reason='none')

            await member.kick(reason=reason)
            await ctx.send(embed=embed)
Ejemplo n.º 15
0
    async def mute(self, ctx, member):
        member = formatting.get_from_in(self.bot, ctx, "mem", member)
        verified = ctx.guild.get_role(settings.VERIFIED_ROLE_ID)
        staff = ctx.guild.get_role(settings.STAFF_ROLE_ID)

        if staff not in ctx.author.roles and verified in member.roles:
            await ctx.send(
                content='You cannot target Verified users with your permissions'
            )
        else:
            muted = ctx.guild.get_role(settings.MUTED_ROLE_ID)

            await member.add_roles(muted)

            embed = discord.Embed(
                description=f'**{member.mention} has been muted**',
                color=0xff6464)
            embed.set_author(name=f'{member.name}#{member.discriminator}',
                             icon_url=member.avatar_url)
            embed.set_thumbnail(url=member.avatar_url)
            embed.timestamp = ctx.message.created_at

            await ctx.send(embed=embed)
Ejemplo n.º 16
0
    async def addqueue(self, ctx, *, string):
        self.queue = self.queue[0:len(self.queue) - 3]
        user_ids = []
        id_build = ''
        string = string + '-'

        for char in string:

            if char == ' ' or char == '-':
                user_ids.append(id_build)
                id_build = ''
            else:
                id_build = id_build + char

        for user in user_ids:
            user = formatting.get_from_in(self.bot, ctx, "use", user)

            self.queue = self.queue + f'{self.queue_position}. {user.name}#{user.discriminator}\n'
            self.queue_position = self.queue_position + 1

        self.queue = self.queue + '```'
        await ctx.message.delete()
        await ctx.send(f'{self.queue}')
Ejemplo n.º 17
0
    async def ship(self, ctx, target1, target2=None):
        member2 = formatting.get_from_in(self.bot, ctx, "mem", target1)

        #checking to see if author is implied as a target
        if target2:
            member1 = formatting.get_from_in(self.bot, ctx, "mem", target2)

        else:
            member1 = ctx.author

        num1 = member1.id % 1000  #command user
        num2 = member2.id % 1000  #target
        comp_num = (num1 + num2 - 40) % 101
        bars_ref = comp_num // 10
        bars_on = bars_ref * '<a:baron:725816473704202242>'
        bars_off = (10 - bars_ref) * '<a:baroff:725816609176027635>'
        status = None

        #this seems sloppy, I think there's a better way to do this. Fixed by using if elif.
        while True:
            if comp_num == 100:
                status = 'You\'re made for eachother <a:true_love:725827494585827481>'
            if comp_num >= 90:
                status = 'True love :heart_eyes:'
                break
            if comp_num >= 80:
                status = 'Wew is it hot in here? :fire:'
                break
            if comp_num >= 70:
                status = 'Just 2 gals being pals :wink:'
                break
            if comp_num == 69:
                status = 'Nice <a:okhandspin:644684375287660564>'
                break
            if comp_num >= 60:
                status = 'Budding potential :heart:'
                break
            if comp_num >= 50:
                status = 'Besties :smile:'
                break
            if comp_num >= 40:
                status = 'Lets just be friends :eyes:'
                break
            if comp_num >= 30:
                status = 'It\'s not you it\'s me... :eyes:'
                break
            if comp_num >= 20:
                status = 'Prepare to get ghosted :ghost:'
                break
            if comp_num >= 10:
                status = 'Bitter rivals :angry:'
                break
            if comp_num >= 1:
                status = 'Sworn enemies :right_facing_fist::left_facing_fist: '
                break
            else:
                status = 'She\'s practically your sister! :nauseated_face:'
                break

        embed = discord.Embed(
            description=f'**{comp_num}%** {bars_on}{bars_off} {status}',
            color=0xe484dc)

        await ctx.message.delete()
        await ctx.send(
            content=
            f'{member1.mention} and {member2.mention} sitting in a tree...',
            embed=embed)
Ejemplo n.º 18
0
    async def rps(self, ctx, state, *, selection=None):
        if state.lower() == 'start' and self.rps_state == 0:
            self.rps2 = formatting.get_from_in(self.bot, ctx, "mem", selection)

            self.rps1 = ctx.message.author
            self.rps_state = 1
            self.rps_channel = ctx.message.channel

            await ctx.send(
                content=
                'Please send your choice to my dm using: \n> **,rps choose rock**   **,rps choose paper**  **,rps choose scissors**'
            )

            for i in range(60):
                if self.rps_state == 0:
                    return
                await asyncio.sleep(1)

            await self.rps_channel.send(
                content='No response, game has timed out')

            self.rps_state = 0
            self.rps1 = None
            self.rps2 = None
            self.input1 = None
            self.input2 = None
            self.rps_channel = None

        if state.lower() == 'start' and self.rps_state == 1:
            await self.rps_channel.send(
                content=
                'There\'s an ongoing game, please wait for them to finish!')

        if state.lower() == 'choose' and ctx.guild is None:
            if ctx.author == self.rps1:
                self.input1 = selection.lower()
                await ctx.send(content='Choice received')
                await self.rps_channel.send(
                    f'Received from **{self.rps1.name}#{self.rps1.discriminator}**'
                )

            if ctx.author == self.rps2:
                self.input2 = selection.lower()
                await ctx.send(content='Choice recieved')
                await self.rps_channel.send(
                    f'Received from **{self.rps2.name}#{self.rps2.discriminator}**'
                )

        if self.input1 != None and self.input2 != None:
            #I'm not positive how to do this other than comparing the if statements. Maybe assigning them to numbers... but the hierachy makes a circle so there's no value comparison that works
            winner = None
            if self.input1 == self.input2:
                winner = None
            elif self.input1 == 'rock' and self.input2 == 'paper':
                winner = self.rps2
            elif self.input1 == 'rock' and self.input2 == 'scissors':
                winner = self.rps1
            elif self.input1 == 'paper' and self.input2 == 'rock':
                winner = self.rps1
            elif self.input1 == 'paper' and self.input2 == 'scissors':
                winner = self.rps2
            elif self.input1 == 'scissors' and self.input2 == 'rock':
                winner = self.rps2
            elif self.input1 == 'scissors' and self.input2 == 'paper':
                winner = self.rps1
            else:
                await self.rps_channel.send(
                    content=
                    'Someone gave an incorrect input. Please start a new game.'
                )

                self.rps_state = 0
                self.rps1 = None
                self.rps2 = None
                self.input1 = None
                self.input2 = None
                self.rps_channel = None

                return

            try:
                embed = discord.Embed(
                    title='Rock! Paper! Scissors!',
                    description=f'**{winner.mention} is the winner!**',
                    color=0x64b4ff)
            except AttributeError:
                embed = discord.Embed(title='Rock! Paper! Scissors!',
                                      description=f'',
                                      color=0x64b4ff)

            if randint(1, 100) == 1 and winner is not None:
                loser = None
                if winner is self.rps1:
                    loser = self.rps2
                else:
                    loser = self.rps1
                embed.description = f'**{winner.mention} would have won but they cheated so __{loser.mention} wins!__**'

            if winner is None:
                embed.set_thumbnail(url='https://i.imgur.com/TIGi71f.png'
                                    )  #thumbnail for no winner
                embed.description = '**It\'s a tie!**'
            else:
                embed.set_thumbnail(url='https://i.imgur.com/GWKFyR9.png'
                                    )  #thumbnail for anyone winning

            embed.add_field(name=f'{self.rps1.name}#{self.rps1.discriminator}',
                            value=f'{self.input1}',
                            inline=False)
            embed.add_field(name=f'{self.rps2.name}#{self.rps2.discriminator}',
                            value=f'{self.input2}',
                            inline=False)
            embed.timestamp = ctx.message.created_at

            await self.rps_channel.send(embed=embed)

            self.rps_state = 0
            self.rps1 = None
            self.rps2 = None
            self.input1 = None
            self.input2 = None
            self.rps_channel = None
Ejemplo n.º 19
0
 async def test2(self, ctx):
     await ctx.send(formatting.get_from_in(self.bot, ctx, "use", ctx.author.id).name)
Ejemplo n.º 20
0
    async def cleanuproles_message(self, ctx, channel, message):
        channel = formatting.get_from_in(self.bot, ctx, "cha", channel)

        await Admin.cleanUpBlock(self, ctx, message, channel)
Ejemplo n.º 21
0
    async def cleanuproles_channel(self, ctx, channel, num):
        channel = formatting.get_from_in(self.bot, ctx, "cha", channel)

        async for message in channel.history(limit=int(num)):
            await Admin.cleanUpBlock(self, ctx, message.id, channel)
Ejemplo n.º 22
0
    async def memberinfo(self, ctx, member):
        member = formatting.get_from_in(self.bot, ctx, "mem", member)
        now = datetime.utcnow()

        db = TinyDB(settings.DB_PATH + str(member.id) + '.json')
        table = db.table('information')
        last_seen = table.get(Query().last_seen != None)['last_seen']
        last_seen = datetime.strptime(last_seen, "%Y-%m-%d")
        time_since_message = formatting.date_difference(
            last_seen, datetime.today())

        roles = ''
        time_since_created = formatting.datetime_difference(
            member.created_at, now)
        time_since_joined = formatting.datetime_difference(
            member.joined_at, now)
        try:
            time_since_nitro = formatting.datetime_difference(
                member.premium_since, now)
        except TypeError:
            time_since_nitro = "None"

        for role in member.roles:
            roles = roles + f'{role.mention}, '
        roles = roles[:-2]

        embed = discord.Embed(title='User info',
                              description=member.mention,
                              color=0x64b4ff)
        embed.set_author(name=f'{member.name}#{member.discriminator}',
                         icon_url=member.avatar_url)
        embed.set_thumbnail(url=member.avatar_url)
        embed.add_field(name='User',
                        value=f'**{member.name}#{member.discriminator}**',
                        inline=True)
        embed.add_field(name='Nickname',
                        value=member.display_name,
                        inline=True)
        embed.add_field(name='ID', value=member.id, inline=True)
        try:
            i = str(member.activity.type).index('.')
            embed.add_field(
                name='Status',
                value=
                f'{str(member.activity.type)[i+1:]} **--** {member.activity.name}'
            )
        except AttributeError:
            embed.add_field(name='Status', value='None')
        embed.add_field(
            name='Created',
            value=f'**__{time_since_created}__** - {member.created_at}',
            inline=False)
        embed.add_field(
            name='Joined',
            value=f'**__{time_since_joined}__** - {member.joined_at}',
            inline=False)
        embed.add_field(
            name='Last seen',
            value=f'**__{time_since_message}__** - {last_seen.date()}',
            inline=False)
        embed.add_field(
            name='Nitro',
            value=f'**__{time_since_nitro}__** - {member.premium_since}',
            inline=False)
        embed.add_field(name='Roles', value=roles, inline=False)

        await ctx.send(embed=embed)
Ejemplo n.º 23
0
    async def battle(self, ctx, target1, target0=None):
        fighter1 = fighter_util.Fighter(
            formatting.get_from_in(self.bot, ctx, "mem", target1), 1)
        if target0:
            fighter0 = fighter_util.Fighter(
                formatting.get_from_in(self.bot, ctx, "mem", target0), 0)
        else:
            fighter0 = fighter_util.Fighter(ctx.author, 0)

        fighters = [fighter0, fighter1]
        users_set = {fighter0.user, fighter1.user}

        for fighter in fighters:
            if fighter.user.bot:
                choices = list(battle_util.weapon_choice.keys())
                seed = randint(0, len(choices) - 1)
                fighter.set_weapon(choices[seed])

        embed = discord.Embed(
            description=f'{fighters[0].user.name} 🆚 {fighters[1].user.name}',
            color=0x64b4ff)
        embed.add_field(name=fighters[0].name, value='?', inline=True)
        embed.add_field(name=fighters[1].name, value='?', inline=True)
        embed.add_field(
            name='Choose your weapon',
            value='If your weapon is not selected on reaction, please re-react',
            inline=False)
        message = await ctx.send(embed=embed)

        for emote in battle_util.weapon_choice.keys():
            await message.add_reaction(emote)

        reaction_list = set()
        waiting = True

        def check(reaction, user):
            if reaction.message == message:
                reaction_list.add(user)

                for fighter in fighters:
                    if user == fighter.user and not fighter.user.bot:
                        fighter.set_weapon(reaction.emoji)
                        #Something has to be returned or else it just hangs
                        return True

        while not fighters[0].weapon or not fighters[1].weapon:
            await self.bot.wait_for('reaction_add', check=check, timeout=20.0)
            done = await self.bot.wait_for('reaction_add',
                                           check=check,
                                           timeout=20.0)
            if done is None:
                await ctx.send(
                    '__**Error:**__\nThe pending game has timed out!')
            for fighter in fighters:
                try:
                    embed.set_field_at(
                        index=fighter.position,
                        name=embed.fields[fighter.position].name,
                        value=fighter.weapon.icon)
                except:
                    embed.set_field_at(
                        index=fighter.position,
                        name=embed.fields[fighter.position].name,
                        value='?')
            await message.edit(embed=embed)

        embed.clear_fields()
        embed.add_field(
            name=f'{fighters[0].name} - {fighters[0].weapon.icon}',
            value=f'{fighters[0].hp}/{fighters[0].hp_max} {fighters[0].heart}',
            inline=True)
        embed.add_field(
            name=f'{fighters[1].name} - {fighters[1].weapon.icon}',
            value=f'{fighters[1].hp}/{fighters[1].hp_max} {fighters[1].heart}',
            inline=True)
        await message.edit(embed=embed)

        attacker = randint(0, 1)
        description = ''
        turns = 2
        while fighters[0].hp > 0 and fighters[1].hp > 0:
            attacked = attacker
            attacker = (attacked + 1) % 2
            seed = randint(0, 1000)
            data = {
                'seed': seed,
                'turn': turns // 2,
                'attacker': fighters[attacker],
                'attacked': fighters[attacked],
                'embed': embed,
            }

            results = fighters[attacker].attack(data)
            text = results.get('text').format(attacker=fighters[attacker].name,
                                              attacked=fighters[attacked].name)
            text = '{heart} '.format(heart=fighters[attacker].circle) + text
            description = battle_util.text_handler(self, text, description)

            embed.description = description
            field_name = embed.fields[fighters[attacked].position].name
            field_value = f'{max(0, fighters[attacked].hp)}/100 {fighters[attacked].heart}'
            embed.set_field_at(index=attacked,
                               name=field_name,
                               value=field_value)
            embed.color = fighters[attacker].color
            await message.edit(embed=embed)

            await asyncio.sleep(2)
            turns += 1

        if fighters[0].hp < fighters[1].hp:
            winner = 1
        else:
            winner = 0

        text = f'👑 __**{fighters[winner].name}**__ has deafeated __{fighters[(winner + 1) % 2].name}__'
        embed.description = battle_util.text_handler(self, text, description)
        embed.add_field(name='Winner',
                        value=fighters[winner].user.mention,
                        inline=False)
        await message.edit(embed=embed)