async def mute(self, ctx, *args): toMute = myself.getUser(ctx, args, allownoargs=False) if not ctx.author.guild_permissions.manage_messages: return await ctx.send('{} | No `manage messages` permission!'.format(self.client.get_emoji(BotEmotes.error))) role = Dashboard.getMuteRole(ctx.guild.id) if role==None: await ctx.send('{} | Please wait... Setting up...\nThis may take a while if your server has a lot of channels.'.format(str(self.client.get_emoji(BotEmotes.loading)))) role = await ctx.guild.create_role(name='Muted', color=discord.Colour.from_rgb(0, 0, 1)) ratelimit_counter = 0 # BEWARE API ABUSE! ADDED SOME STUFF TO REDUCE RATELIMITS for i in ctx.guild.channels: if ratelimit_counter > 10: # take a break for a while await asyncio.sleep(2) ratelimit_counter = 0 ; continue if str(i.type)=='text': await i.set_permissions(role, send_messages=False) ratelimit_counter += 1 elif str(i.type)=='voice': await i.set_permissions(role, connect=False) ratelimit_counter += 1 Dashboard.editMuteRole(ctx.guild.id, role.id) role = role.id role = ctx.guild.get_role(role) try: await toMute.add_roles(role) await ctx.send('{} | Muted. Ductaped {}\'s mouth.'.format(str(self.client.get_emoji(BotEmotes.success)), toMute.name)) except Exception as e: print(e) await ctx.send('{} | I cannot mute him... maybe i has less permissions than him.\nHis mouth is too powerful.'.format(str(self.client.get_emoji(BotEmotes.error))))
async def on_member_remove(member): # REMOVE ALL WARNS Dashboard.clearWarn(member) # SEND GOODBYE CHANNEL goodbye_message, goodbye_channel = Dashboard.send_goodbye( member, discord), Dashboard.get_welcome_channel(member.guild.id) if goodbye_message != None and goodbye_channel != None: await member.guild.get_channel(goodbye_channel).send( embed=goodbye_message)
async def on_guild_remove(guild): Dashboard.delete_data(guild.id) # DELETE THE IF-STATEMENT BELOW IF YOU ARE USING THIS CODE if guild.owner.id in [ a.id for a in client.get_guild(Config.SupportServer.id).members ]: userinsupp = client.get_guild(Config.SupportServer.id).get_member( guild.owner.id) await userinsupp.remove_roles( client.get_guild( Config.SupportServer.id).get_role(727667048645394492))
async def dehoister(self, ctx, *args): if not ctx.author.guild_permissions.manage_nicknames: return await ctx.send('{} | You need the `Manage Nicknames` permissions!'.format(str(self.client.get_emoji(BotEmotes.error)))) data = Dashboard.getDehoister(ctx.guild.id) if not data: Dashboard.setDehoister(ctx.guild, True) return await ctx.send(embed=discord.Embed( title='Activated dehoister.', description=f'**What is dehoister?**\nDehoister is an automated part of this bot that automatically renames someone that tries to hoist their name (for example: `!ABC`)\n\n**How do i deactivate this?**\nJust type `{Config.prefix}dehoister`.\n\n**It doesn\'t work for me!**\nMaybe because your role position is higher than me, so i don\'t have the permissions required.', color=discord.Colour.from_rgb(201, 160, 112) )) Dashboard.setDehoister(ctx.guild, False) await ctx.send('{} | Dehoister deactivated.'.format(self.client.get_emoji(BotEmotes.success)))
async def on_guild_channel_create(channel): if str(channel.type) not in ['text', 'voice']: return data = Dashboard.getMuteRole(channel.guild.id) if data == None: return if str(channel.type) == 'text': return await channel.set_permissions(channel.guild.get_role(data), send_messages=False) await channel.set_permissions(channel.guild.get_role(data), connect=False)
async def on_member_join(member): # SEND WELCOME CHANNEL welcome_message, welcome_channel = Dashboard.send_welcome( member, discord), Dashboard.get_welcome_channel(member.guild.id) if welcome_message != None and welcome_channel != None: await member.guild.get_channel(welcome_channel).send( embed=welcome_message) data = Dashboard.add_autorole(member.guild.id) if data.isnumeric(): # AUTOROLE await member.add_roles(member.guild.get_role(int(data))) if member.name.startswith('!'): if not Dashboard.getDehoister(member.guild): return try: await member.edit(nick='Dehoisted user') except: pass
async def starboard(self, ctx, *args): wait = await ctx.send('{} | Please wait...'.format( str(self.client.get_emoji(BotEmotes.error)) )) if not ctx.author.guild_permissions.manage_channels: return await wait.edit(content='{} | You need the `Manage channels` permission.'.format( str(self.client.get_emoji(BotEmotes.error)) )) starboard_channel = Dashboard.getStarboardChannel(ctx.guild) if len(list(args))==0: if starboard_channel['channelid']==None: channel = await ctx.guild.create_text_channel(name='starboard', topic='Server starboard channel. Every funny/cool posts will be here.') Dashboard.addStarboardChannel(channel, 1) return await wait.edit(content=f'{str(self.client.get_emoji(BotEmotes.success))} | OK. Created a channel <#{str(channel.id)}>. Every starboard will be set there.\nTo remove starboard, type `{Config.prefix}starboard remove`.\nBy default, starboard requirements are set to 1 reaction. To increase, type `{Config.prefix}starboard limit <number>`.') return await wait.edit(content='', embed=discord.Embed( title=f'Starboard for {ctx.guild.name}', description='Channel: <#{}>\nStars required to reach: {}'.format( starboard_channel['channelid'], starboard_channel['starlimit'] ), color=discord.Colour.from_rgb(201, 160, 112) )) if starboard_channel['channelid']==None: return elif list(args)[0].lower().startswith('rem'): Dashboard.removeStarboardChannel(ctx.guild) return await wait.edit(content='{} | OK. Starboard for this server is deleted.'.format(str(self.client.get_emoji(BotEmotes.success)))) elif list(args)[0].lower()=='limit': try: num = int(list(args)[1]) if not num in range(1, 20): return await wait.edit(content='{} | Invalid number.'.format(str(self.client.get_emoji(BotEmotes.error)))) Dashboard.setStarboardLimit(num, ctx.guild) await wait.edit(content='{} | Set the limit to {} reactions.'.format(str(self.client.get_emoji(BotEmotes.success)), str(num))) except: await wait.edit(content='{} | Invalid number.'.format(str(self.client.get_emoji(BotEmotes.error))))
async def unwarn(self, ctx): if not ctx.author.guild_permissions.manage_messages: return await ctx.send(f'{str(self.client.get_emoji(BotEmotes.error))} | You need the `Manage messages` permissions to unwarn someone.') if len(ctx.message.mentions)==0: return await ctx.send('{} | Please TAG someone !!!'.format( str(self.client.get_emoji(BotEmotes.error)) )) unwarned = Dashboard.clearWarn(ctx.message.mentions[0]) if unwarned: return await ctx.send(f'{str(self.client.get_emoji(BotEmotes.success))} | Successfully unwarned {ctx.message.mentions[0].name}.') await ctx.send(f'{str(self.client.get_emoji(BotEmotes.error))} | An error occurred.')
async def on_member_update(before, after): if before.nick == after.nick: return elif after.nick == None: return if after.nick.startswith('!'): if not Dashboard.getDehoister(after.guild.id): return try: await after.edit(nick='Dehoisted user') except: pass
async def config(self, ctx): data = Dashboard.getData(ctx.guild.id) if data==None: return await ctx.send('{} | This server does not have any configuration for this bot.'.format(self.client.get_emoji(BotEmotes.error))) autorole = 'Set to <@&{}>'.format(data['autorole']) if data['autorole']!=None else '<Not set>' welcome = 'Set to <#{}>'.format(data['welcome']) if data['welcome']!=None else '<Not set>' starboard = 'Set to <#{}> (with {} reactions required)'.format(data['starboard'], data['star_requirements']) if data['starboard']!=None else '<Not set>' mute = 'Set to <@&{}>'.format(data['mute']) if data['mute']!=None else '<Not set>' extras = [len(data['shop']), len(data['warns'])] dehoister = 'Enabled :white_check_mark:' if data['dehoister'] else 'Disabled :x:' await ctx.send(embed=discord.Embed(title=f'{ctx.guild.name}\'s configuration', description=f'**Auto role:** {autorole}\n**Welcome channel:** {welcome}\n**Starboard channel: **{starboard}\n**Name/nick dehoister: **{dehoister}\n**Mute role: **{mute}\n**Members warned: **{extras[1]}\n**Shop products sold: **{extras[0]}', color=discord.Colour.from_rgb(201, 160, 112)).set_thumbnail(url=ctx.guild.icon_url))
async def unmute(self, ctx): toUnmute = myself.getUser(ctx, args, allownoargs=False) roleid = Dashboard.getMuteRole(ctx.guild.id) if roleid==None: return await ctx.send('{} | He is not muted!\nOr maybe you muted this on other bot... which is not compatible.'.format(self.client.get_emoji(BotEmote.error))) elif roleid not in [i.id for i in ctx.message.mentions[0].roles]: return await ctx.send('{} | That guy is not muted.'.format(self.client.get_emoji(BotEmotes.error))) try: await toUnmute.remove_roles(ctx.guild.get_role(roleid)) await ctx.send('{} | {} unmuted.'.format(self.client.get_emoji(BotEmotes.success), toUnmute.name)) except: await ctx.send('{} | I cannot unmute {}!'.format(self.client.get_emoji(BotEmotes.error), ctx.message.mentions[0].name))
async def on_raw_reaction_add(payload): # IF IS NOT STAR EMOJI, IGNORE if str(payload.emoji) != 'тнР': return data = Dashboard.getStarboardChannel(None, guildid=payload.guild_id) if data == None: return try: messages = await client.get_channel(data['channelid'] ).history().flatten() starboards = [ int(str(message.content).split(': ')[1]) for message in messages if message.author.id == Config.id ] if payload.message_id in starboards: return except: return message = await client.get_channel(payload.channel_id ).fetch_message(payload.message_id) if len(message.reactions) == data['starlimit']: await client.get_channel(data['channelid']).send( content=f'ID: {message.id}', embed=Dashboard.sendStarboard(discord, message))
async def autorole(self, ctx, *args): if not ctx.author.guild_permissions.manage_roles: await ctx.send("{} | You need the `Manage Roles` permission!".format(str(self.client.get_emoji(BotEmotes.error)))) else: if len(list(args))==0: await ctx.send(embed=discord.Embed( title='Command usage', description='{}autorole <ROLENAME/ROLEPING>\n{}autorole disable'.format(Config.prefix, Config.prefix), color=discord.Color.from_rgb(201, 160, 112) )) else: if list(args)[0].lower()=='disable': Dashboard.set_autorole(ctx.guild.id, None) await ctx.send("{} | Autorole disabled!".format(str(self.client.get_emoji(BotEmotes.success)))) else: try: if list(args)[0].startswith("<@&") and list(args)[0].endswith('>'): roleid = int(list(args)[0].split('<@&')[1].split('>')[0]) else: roleid = int([i.id for i in ctx.guild.roles if str(i.name).lower()==str(' '.join(list(args))).lower()][0]) Dashboard.set_autorole(ctx.guild.id, roleid) await ctx.send("{} | Success! set the autorole to **{}!**".format(str(self.client.get_emoji(BotEmotes.success)), ctx.guild.get_role(roleid).name)) except: await ctx.send("{} | Invalid arguments!".format(str(self.client.get_emoji(BotEmotes.error))))
async def welcome(self, ctx, *args): if not ctx.author.guild_permissions.manage_channels: await ctx.send("{} | You need the `Manage Channels` permission!".format(str(self.client.get_emoji(BotEmotes.error)))) else: if len(list(args))==0: await ctx.send(embed=discord.Embed( title='Command usage', description='{}welcome <CHANNEL>\n{}welcome disable'.format(Config.prefix, Config.prefix), color=discord.Color.from_rgb(201, 160, 112) )) else: if list(args)[0].lower()=='disable': Dashboard.set_welcome(ctx.guild.id, None) await ctx.send("{} | Welcome disabled!".format(str(self.client.get_emoji(BotEmotes.success)))) else: try: if list(args)[0].startswith("<#") and list(args)[0].endswith('>'): channelid = int(list(args)[0].split('<#')[1].split('>')[0]) else: channelid = int([i.id for i in ctx.guild.channels if str(i.name).lower()==str(''.join(list(args))).lower()][0]) Dashboard.set_welcome(ctx.guild.id, channelid) await ctx.send("{} | Success! set the welcome log to <#{}>!".format(str(self.client.get_emoji(BotEmotes.success)), channelid)) except Exception as e: await ctx.send("{} | Invalid arguments!".format(str(self.client.get_emoji(BotEmotes.error))))
async def warnlist(self, ctx): source = ctx.author if (len(ctx.message.mentions)==0) else ctx.message.mentions[0] data = Dashboard.getWarns(source) if data==None: return await ctx.send(f'{str(self.client.get_emoji(BotEmotes.error))} | Good news! {source.name} does not have any warns!') warnlist = '\n'.join([ '{}. "{}" (warned by <@{}>)'.format( i+1, data[i]['reason'], data[i]['moderator'] ) for i in range(0, len(data)) ][0:10]) await ctx.send(embed=discord.Embed( title=f'Warn list for {source.name}', description=warnlist, color=discord.Colour.red() ))
async def warn(self, ctx, *args): if len(ctx.message.mentions)==0: return await ctx.send('{} | Mention someone.'.format(str(self.client.get_emoji(BotEmotes.error)))) elif ctx.message.mentions[0].id == ctx.author.id: return await ctx.send(':joy: | Warning yourself? Really?') elif not ctx.author.guild_permissions.manage_messages: return await ctx.send('{} | You need to have manage messages permissions to do this man. Sad.'.format(str(self.client.get_emoji(BotEmotes.error)))) reason = 'No reason provided' if (len(list(args))<2) else ' '.join(list(args)[1:len(list(args))]) if len(reason)>100: return await ctx.send('{} | Your reason is toooo longgg!'.format( str(self.client.get_emoji(BotEmotes.error)) )) warned = Dashboard.addWarn(ctx.message.mentions[0], ctx.author, reason) if warned: return await ctx.send(f'{str(self.client.get_emoji(BotEmotes.success))} | {ctx.message.mentions[0].name}#{ctx.message.mentions[0].discriminator} was warned by {ctx.author.name}#{ctx.author.discriminator} for the reason *"{reason}"*.') await ctx.send(f'{str(self.client.get_emoji(BotEmotes.error))} | An error occurred.')
async def on_guild_channel_delete(channel): # IF CHANNEL MATCHES WITHIN DATABASE, DELETE IT ON DATABASE AS WELL Dashboard.databaseDeleteChannel(channel)
async def on_guild_role_delete(role): muterole = Dashboard.getMuteRole(role.guild.id) if muterole == None: return if muterole != role.id: return Dashboard.editMuteRole(role.guild.id, None)