async def starboard(self, ctx):
     channel = db.record('SELECT star_channel FROM guild WHERE GuildID = ?',
                         ctx.guild.id) or ('Not Set', )
     star_lim = db.record('SELECT star_count FROM guild WHERE GuildID = ?',
                          ctx.guild.id) or (1, )
     if isinstance(channel[0], int):
         channel_ = self.bot.get_channel(channel[0])
     else:
         channel_ = 'Not Set'
     status = 'Status: Active <:4941_online:787764205256310825>' if channel_ != 'Not Set' else 'Status: Inactive <:offline:787764149706031104>'
     colour = discord.Colour.green(
     ) if channel_ != 'Not Set' else discord.Colour.red()
     embed = discord.Embed(title=status,
                           colour=colour,
                           timestamp=ctx.message.created_at).set_footer(
                               text='Prompted by {}'.format(ctx.author),
                               icon_url=ctx.author.avatar_url)
     embed.add_field(
         name='Channel:',
         value=channel_.mention if channel_ != 'Not Set' else channel_)
     embed.add_field(
         name='Star Limit:',
         value='**{}**'.format('1' if not star_lim[0] else star_lim[0]),
         inline=False)
     await ctx.send(embed=embed)
 async def setstarlimit(self, ctx, count_='1'):
     try:
         count_ = int(count_)
     except ValueError:
         ctx.command.reset_command(ctx)
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Star limit must be a number not letters!',
             colour=discord.Colour.red()))
     if count_ < 0:
         return await ctx.send(embed=discord.Embed(description=''))
     board = db.record('SELECT star_channel FROM guild WHERE GuildID = ?',
                       ctx.guild.id) or (None, )
     if not board[0]:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Please setup a starboard using command `-Setboard` before using this command!',
             colour=discord.Colour.red()))
     else:
         db.execute('UPDATE guild SET star_count = ? WHERE GuildID = ?',
                    count_, ctx.guild.id)
         db.commit()
         await ctx.send(embed=discord.Embed(
             description=
             '<a:Passed:757652583392215201> New Starboard limit is {}.'.
             format(count_),
             colour=discord.Colour.green()))
 async def setboard(self, ctx, channel: discord.TextChannel = None):
     if not channel:
         ctx.command.reset_command(ctx)
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Please mention a channel, If you wish to remove your starboard mention that channel! You can view your configs by using command `-Starboard`',
             colour=discord.Colour.red()))
     channel_ = db.record(
         'SELECT star_channel FROM guild WHERE GuildID = ?',
         ctx.guild.id) or (None, )
     if channel_[0] == channel.id:
         db.execute('UPDATE guild SET star_channel = ? WHERE GuildID = ?',
                    None, ctx.guild.id)
         db.commit()
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:Passed:757652583392215201> Removed starboard from this server!',
             colour=discord.Colour.green()))
     db.execute('UPDATE guild SET star_channel = ? WHERE GuildID = ?',
                channel.id, ctx.guild.id)
     db.commit()
     await ctx.send(embed=discord.Embed(
         description=
         '<a:Passed:757652583392215201> New Starboard has been set for {}'.
         format(channel.mention),
         colour=discord.Colour.green()))
Beispiel #4
0
def get_prefix(bot,message):
    if isinstance(message.channel, discord.DMChannel):
        return
    prefix = db.record(
        'SELECT prefix FROM guild WHERE GuildID = ?', message.guild.id) or None
    if not prefix:
        db.execute('INSERT INTO guild (GuildID) VALUES (?)', message.guild.id)
        db.commit()
        prefix = '-'
    else:
        prefix = prefix[0]
    return commands.when_mentioned_or(prefix)(bot, message)
 async def on_raw_reaction_add(self, payload):
     if payload.emoji.name == '🔒' and not payload.member.bot:
         message = await self.bot.get_channel(
             payload.channel_id).fetch_message(payload.message_id)
         if not message.embeds:
             return
         dict_ = message.embeds[0].to_dict()
         if dict_['color'] != 1752220 and len(
                 dict_['title'].split('#')) != 2:
             return
         if not str(payload.member) == dict_['title'].split("'")[0]:
             return
         channel = self.bot.get_channel(payload.channel_id)
         await channel.delete()
     if not payload.emoji.name == '📩':
         return
     category, message, root, count, role = db.record(
         'SELECT TicketChannel, TicketMessage, TMC, Count, HelperRole FROM tickets WHERE GuildID = ?',
         payload.guild_id) or (None, None, None, 0, None)
     if not message or not root or payload.member.bot:
         return
     ticket_message = await self.bot.get_channel(root).fetch_message(message
                                                                     )
     if payload.member != self.bot.user:
         await ticket_message.remove_reaction(payload.emoji, payload.member)
     guild: discord.Guild = self.bot.get_guild(payload.guild_id)
     helper: discord.Role = discord.utils.get(guild.roles, name=role)
     if not category:
         channel = await guild.create_text_channel(
             name='ticket-{}'.format(count),
             overwrites=over(payload.member, helper),
             reason='Ticket Opened by {}'.format(payload.member))
     else:
         category: discord.CategoryChannel = self.bot.get_channel(category)
         channel = await category.create_text_channel(
             name='ticket-{}'.format(count),
             overwrites=over(payload.member, helper),
             reason='Ticket Opened by {}'.format(payload.member))
     db.execute('UPDATE tickets SET Count = Count + 1 WHERE GuildID = ?',
                payload.guild_id)
     db.commit()
     msg = await channel.send(
         embed=discord.Embed(title="{}'s Ticket:".format(payload.member),
                             description=f'''
         This is your support ticket, State your problems here and a user with the role {helper.mention} will be with you.
         To close this ticket react with a \🔒 to close this ticket.
         ''',
                             colour=discord.Colour.teal()))
     await msg.add_reaction('🔒')
 async def remove_tickets(self, ctx):
     is_active = db.record(
         'SELECT TicketMessage FROM tickets WHERE GuildID = ?',
         ctx.guild.id) or (None, )
     if not is_active[0]:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> You have not got any running tickets for this sever!.',
             colour=discord.Colour.red()))
     db.execute('DELETE FROM tickets WHERE GuildID = ?', ctx.guild.id)
     db.commit()
     await ctx.send(embed=discord.Embed(
         description=
         '<a:Passed:757652583392215201> Tickets is no longer active with your server!',
         colour=discord.Colour.green()))
 async def delwarn(self, ctx, user: discord.Member = None, warn: str = '0'):
     if warn == '0':
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Need to provide a warn number!',
             colour=discord.Colour.red()))
     try:
         warn = int(warn)
     except ValueError:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Number provided must be a number not letters!',
             colour=discord.Colour.red()))
     if not user:
         return await ctx.send(embed=discord.Embed(
             description='<a:nope:787764352387776523> Provide a member!',
             colour=discord.Colour.red()))
     warns = db.record('SELECT warnings FROM guild WHERE GuildID = ?',
                       ctx.guild.id) or (None, )
     if not warns[0]:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> User doesnt have any warns!',
             colour=discord.Colour.red()))
     warns = json.loads(warns[0])
     if len(warns[str(user.id)]) < warn or warn < 1:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Warn number was not found!',
             colour=discord.Colour.red()))
     if user == ctx.author:
         return await ctx.send(embed=discord.Embed(
             description=
             '<a:nope:787764352387776523> Cannot remove your own warns!'))
     del warns[str(user.id)][str(warn)]
     if len(warns[str(user.id)]) == 0:
         del warns[str(user.id)]
     stringed = json.dumps(warns)
     db.execute('UPDATE guild SET warnings = ? WHERE GuildID = ?', stringed,
                ctx.guild.id)
     db.commit()
     await ctx.send(embed=discord.Embed(
         description=
         '<a:Passed:757652583392215201> Deleted warning number **{}** for user **{}**.'
         .format(warn, user),
         colour=discord.Colour.green()))
 async def warnings(self, ctx, user: discord.Member = None):
     user = user or ctx.author
     warnings_ = db.record('SELECT warnings FROM guild WHERE GuildID = ?',
                           ctx.guild.id) or (None, )
     if not warnings_[0]:
         await ctx.send(embed=discord.Embed(
             description='**The user {} has no warnings.**'.format(user),
             colour=discord.Colour.red()))
     else:
         dict_ = json.loads(warnings_[0])
         try:
             user_ = dict_[str(user.id)]
         except KeyError:
             return await ctx.send(embed=discord.Embed(
                 description=
                 "<a:nope:787764352387776523> The user **{}** doesn't have any warns"
                 .format(user),
                 colour=discord.Colour.red()))
         warns = len(dict_[str(user.id)])
         embed = discord.Embed(
             colour=discord.Colour.red(),
             title='📖 Logs:'.format(warns),
             timestamp=datetime.datetime.utcnow()).set_footer(
                 text='Prompted by {}'.format(ctx.author),
                 icon_url=ctx.author.avatar_url)
         embed.set_author(icon_url=user.avatar_url, name=user)
         for i in range(len(user_)):
             reason = dict_[str(user.id)][str(i + 1)]['reason']
             mod = dict_[str(user.id)][str(i + 1)]['moderator']
             time = dict_[str(user.id)][str(i + 1)]['warned_at']
             embed.add_field(name='#{} | Warn | {}'.format(
                 str(i + 1), time),
                             value='Responsible Mod: {}\nReason: {}'.format(
                                 mod, reason),
                             inline=False)
         await ctx.send(embed=embed)
    async def warn(self,
                   ctx,
                   user: discord.Member = None,
                   *,
                   reason: str = None):
        if not user:
            return await ctx.send(embed=discord.Embed(
                description=
                '<a:nope:787764352387776523> Need to provide a user to warn!',
                colour=discord.Colour.red()),
                                  mention_author=False)
        if user.top_role > ctx.author.top_role:
            return await ctx.message.reply(embed=discord.Embed(
                description=
                '<a:nope:787764352387776523> Cannot warn members with a higher role then you!',
                colour=discord.Colour.red()),
                                           mention_author=False)
        if user == ctx.author:
            return await ctx.message.reply(embed=discord.Embed(
                description='<a:nope:787764352387776523> Cannot warn yourself!',
                colour=discord.Colour.red()),
                                           mention_author=False)
        if not reason:
            return await ctx.message.reply(embed=discord.Embed(
                description=
                '<a:nope:787764352387776523> Need to provide a reason for the warn!',
                colour=discord.Colour.red()),
                                           mention_author=False)

        action = db.record('SELECT ModAction FROM guild WHERE GuildID = ?',
                           ctx.guild.id) or (0, )
        current_warns = db.record(
            'SELECT warnings FROM guild WHERE GuildID = ?',
            ctx.guild.id) or (None, )
        if not current_warns[0]:
            former = {
                user.id: {
                    1: {
                        'moderator':
                        str(ctx.author),
                        'reason':
                        reason,
                        'warned_at':
                        datetime.datetime.utcnow().strftime(
                            '%d/%m/%Y - %I:%M %p'),
                        'num':
                        action[0] + 1
                    }
                }
            }
            stringed = json.dumps(former)
            db.execute('UPDATE guild SET warnings = ? WHERE GuildID = ?',
                       stringed, ctx.guild.id)
            await ctx.message.reply(embed=discord.Embed(
                description=
                '<a:Passed:757652583392215201> **Successfully** logged warning for {}'
                .format(user.mention),
                colour=discord.Colour.green()))
        else:
            data = current_warns[0]
            dict_ = json.loads(data)
            if str(user.id) not in dict_:
                dict_[str(user.id)] = {
                    1: {
                        'moderator':
                        str(ctx.author),
                        'reason':
                        reason,
                        'warned_at':
                        datetime.datetime.utcnow().strftime(
                            '%d/%m/%Y - %I:%M %p'),
                        'num':
                        action[0] + 1
                    }
                }
            else:
                dict_[str(user.id)][str(len(dict_[str(user.id)]) + 1)] = {
                    'moderator':
                    str(ctx.author),
                    'reason':
                    reason,
                    'warned_at':
                    datetime.datetime.utcnow().strftime('%d/%m/%Y - %I:%M %p'),
                    'num':
                    action[0] + 1
                }
            stringed = json.dumps(dict_)
            db.execute('UPDATE guild SET warnings = ? WHERE GuildID = ?',
                       stringed, ctx.guild.id)
            db.execute('UPDATE guild SET ModAction = ? WHERE GuildID = ?',
                       action[0] + 1, ctx.guild.id)
            await ctx.message.reply(embed=discord.Embed(
                description=
                '<a:Passed:757652583392215201> **Successfully** warned **{}**'.
                format(user),
                colour=discord.Colour.green()))
        db.commit()
 async def on_raw_reaction_add(self, payload):
     global count
     if payload.emoji.name == 'тнР':
         channel = db.record(
             'SELECT star_channel FROM guild WHERE GuildID = ?',
             payload.guild_id) or (None, )
         if not channel[0]:
             return
         message = await self.bot.get_channel(
             payload.channel_id).fetch_message(payload.message_id)
         if payload.member.id == message.author.id or message.author.bot or channel[
                 0] == payload.channel_id:
             return await message.remove_reaction(payload.emoji,
                                                  payload.member)
         star_message = db.record(
             'SELECT StarMessage FROM starboard WHERE RootMessage = ?',
             message.id) or (None, )
         star_limit = db.record(
             'SELECT star_count FROM guild WHERE GuildID = ?',
             payload.guild_id) or (0, )
         for reaction in message.reactions:
             if reaction.emoji == 'тнР':
                 count = reaction.count
                 break
             else:
                 count = 0
         if count == 0:
             db.execute('DELETE FROM starboard WHERE RootMessage = ?',
                        message.id)
             return db.commit()
         star_limit = 0 if not star_limit[0] else star_limit[0]
         if count < star_limit:
             return
         star_channel = self.bot.get_channel(channel[0])
         embed, mes = create_embed(message, count)
         if not star_message[0]:
             try:
                 star_mes = await star_channel.send(content=mes,
                                                    embed=embed)
             except discord.errors.HTTPException:
                 embed = discord.Embed(
                     description='[Original Message]({})'.format(
                         message.jump_url),
                     colour=discord.Colour.red()).set_author(
                         icon_url=message.author.avatar_url,
                         name=message.author)
                 embed.set_footer(
                     text='Missing Field, Cannot Load Original Message!',
                     icon_url=self.bot.user.avatar_url)
                 star_mes = await star_channel.send(embed=embed,
                                                    content=mes)
             db.execute(
                 'INSERT INTO starboard (RootMessage, StarMessage) VALUES (?, ?)',
                 message.id, star_mes.id)
             db.commit()
         else:
             star_message = await star_channel.fetch_message(star_message[0]
                                                             )
             try:
                 await star_message.edit(content=mes, embed=embed)
             except discord.errors.HTTPException:
                 embed = discord.Embed(
                     description='[Original Message]({})'.format(
                         message.jump_url),
                     colour=discord.Colour.red()).set_author(
                         icon_url=message.author.avatar_url,
                         name=message.author)
                 embed.set_footer(
                     text='Missing Field, Cannot Load Original Message!',
                     icon_url=self.bot.user.avatar_url)
                 await star_message.edit(embed=embed, content=mes)