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()))
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)