async def list(self, ctx): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') chanstr = '' for i in channellist: if i == '': continue splitted = i.split('|') channel = await self.bot.fetch_channel(int(splitted[0])) chanstr += f'{channel.mention} - {self.yesno(splitted[1])}\n' if chanstr != '': await ctx.send(embed=func.Embed(chanstr)) else: await ctx.send(embed=func.Embed('The channel list is empty!')) return
async def snipe(self, ctx): with open("./data/sniper.json") as f: self.sniper = json.load(f) if not ctx.author.guild_permissions.manage_messages: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) if not str(ctx.guild.id) in self.sniper: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NoSnipeMessage"))) if not str(ctx.channel.id) in self.sniper[str(ctx.guild.id)]: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NoSnipeMessage"))) user = await self.bot.fetch_user(self.sniper[str( ctx.guild.id)][str(ctx.channel.id)]["AuthorID"]) embed = discord.Embed(colour=discord.Colour(0x27b1db), description=self.sniper[str( ctx.guild.id)][str( ctx.channel.id)]["Message"]) embed.set_author(name=user.name, icon_url=user.avatar_url) await ctx.send(embed=embed) del self.sniper[str(ctx.guild.id)] with open("./data/sniper.json", "w") as f: json.dump(self.sniper, f, indent=4)
async def cog(self, ctx): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) await ctx.send(embed=func.Embed( "**cog load** - Load a cog.\n**cog unload** - Unload a cog.\n**cog reload** - Reload a cog\n**cog list** - Lists all cogs." ))
async def shutdown(self, ctx): if not sql.isOwner(ctx.author): return await ctx.send(embed=func.NoPerm()) await ctx.send("Shutting down...") await self.bot.logout()
async def remove(self, ctx, channel: discord.TextChannel = None): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) if not channel: return await ctx.send(embed=func.ErrorEmbed( 'Please mention a channel to remove from the list')) channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') if str(channel.id) not in [i.split('|')[0] for i in channellist]: return await ctx.send( embed=func.ErrorEmbed(f'{channel.mention} is not in the list')) await ctx.send(embed=func.Embed( f'Channel {channel.mention} has been removed from the list')) st = '' for i in channellist: if i.split('|')[0] != str(channel.id): st += f'\n{i}' write = open(self.SAVELOC + 'cotd.txt', 'w') write.write(st) write.close()
async def add(self, ctx, user: discord.User = None, access: str = None): types = ['owner', 'admin'] if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) if not user or not access: return await ctx.send( embed=func.ErrorEmbed(f"Mention a user & access rank")) if access not in types: return await ctx.send( embed=func.ErrorEmbed(f"Please type 'admin' or 'owner'")) if access == 'owner': type = 2 elif access == 'admin': type = 1 if not sql.isStaff(user): if sql.SetAccess(user, type): await ctx.send( embed=func.Embed(f"Gave {user.mention} {access}.")) else: await ctx.send(embed=func.ErrorEmbed( "Something went wrong. Please try again")) else: await ctx.send( embed=func.ErrorEmbed("That user already has access rights"))
async def access(self, ctx): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) await ctx.send(embed=func.ErrorEmbed( f"Usage:\n\n{ctx.prefix}access add @user [Type]\n{ctx.prefix}access remove @user\n{ctx.prefix}access list\n\n Access Types: admin & owner" ))
async def list(self, ctx): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) cogs = [] for file in os.listdir("modules"): if file.endswith(".py"): name = file[:-3] cogs.append(name) await ctx.send(embed=func.Embed("\n".join(cogs)))
async def say(self, ctx, *args): try: if ctx.author.guild_permissions.manage_messages: await ctx.message.delete() message = ' '.join(args) await ctx.send(message) else: await ctx.send(embed=func.NoPerm(self, ctx.guild.id)) except: return
async def remove(self, ctx, member: discord.Member = None, id=None): if not ctx.author.guild_permissions.manage_messages: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) if not member: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NoInfractionsUser")), delete_after=15) if not id: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, "{} {}{}".format( Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NeedID"), ctx.prefix, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NeedIDEnd"))), delete_after=15) rm = sql.RemoveInfraction(id, ctx.guild.id, member.id) channel = await self.bot.fetch_channel( self.bot.cache[ctx.guild.id]["Logs"]) if not rm: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, "{} {}: {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "DoesntHave"), id)), delete_after=15) await ctx.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "InfractionRemoved"), id))) if channel: await channel.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "InfractionRemoved"), id))) sql.LogMe( ctx.guild.id, 5, "{} ({}) {}: {} {} {}".format( ctx.author.display_name, ctx.author.name, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "UnWarned"), id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "From"), member.name))
async def load(self, ctx, cog: str = None): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) if not cog: await ctx.send(embed=func.ErrorEmbed("Please name a cog to load")) try: self.bot.load_extension(f"modules.cogs.{cog}") await ctx.send(embed=func.Embed(f"{cog} was successfully loaded.")) except Exception as error: await ctx.send(embed=func.ErrorEmbed(f"{cog} failed to load")) await ctx.author.send(error)
async def list(self, ctx): if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) supporter_roles = sql.getSupportRoles() roless = [] for i in supporter_roles: role = discord.utils.get(ctx.guild.roles, id=int(i)) roless.append(role.name) await ctx.send(embed=func.Embed("\n".join(roless)))
async def warn(self, ctx, member: discord.Member = None, reason=None): if not ctx.author.guild_permissions.manage_messages: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) if not member: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "WarnNoUser")), delete_after=15) if not reason: reason = Language.get(ctx.guild.id, self.bot.cache, "Moderator", "NoReason") channel = await self.bot.fetch_channel( self.bot.cache[ctx.guild.id]["Logs"]) sql.Warn(ctx.guild.id, member.id, ctx.author.id, reason) await member.send(embed=func.Alert( self, member, ctx.guild, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Warned"), ctx.author, reason)) await ctx.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {} | {}: {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "WasWarned"), ctx.author.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))) await Rules.DoRule(self, member, ctx.guild, self.bot.tobemuted, self.bot.tobekicked, self.bot.tobebanned) if channel: await channel.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {} | {}: {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "WasWarned"), ctx.author.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))) sql.LogMe( ctx.guild.id, 5, "{} ({}) {} {}. {}: {}".format( ctx.author.display_name, ctx.author.name, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Warned"), member.name, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))
async def add(self, ctx, channel: discord.TextChannel = None): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) if not channel: return await ctx.send(embed=func.ErrorEmbed( 'Please mention a channel to add to the list')) multiple = False if len(ctx.message.channel_mentions) > 1: multiple = True multilist = [] for i in ctx.message.channel_mentions: channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') if str(i.id) in [i.split('|')[0] for i in channellist]: await ctx.send(embed=func.ErrorEmbed( f'{i.mention} is already in the list, skipping..')) continue if not multiple: await ctx.send(embed=func.Embed( f'Channel {i.mention} has been added to the list')) write = open(self.SAVELOC + 'cotd.txt', 'a') write.write(f"\n{i.id}|0") write.close() multilist.append(i) if multiple: channelmentions = '' for i in multilist: channelmentions += f'{i.mention}, ' await ctx.send(embed=func.Embed( f'Channels {channelmentions} have been added to the list'))
async def ban(self, ctx, user: discord.User = None, *args): if not ctx.author.guild_permissions.ban_members: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) if not user: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "BanNoUser")), delete_after=15) reason = ' '.join(args) channel = await self.bot.fetch_channel( self.bot.cache[ctx.guild.id]["Logs"]) if reason == "": reason = Language.get(ctx.guild.id, self.bot.cache, "Moderator", "NoReason") await user.send(embed=func.Alert( self, user, ctx.guild, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Banned"), ctx.author.name, reason)) await ctx.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {} | {}: {}".format( user.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "WasBanned"), ctx.author.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))) if channel: await channel.send(embed=func.GoodResponseEmbed( self, ctx.guild.id, "{} {} {} | {}: {}".format( user.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "WasBanned"), ctx.author.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))) await ctx.guild.ban(user, reason=reason, delete_message_days=7) sql.LogMe( ctx.guild.id, 8, "{} ({}) {} {}. {}: {}".format( ctx.author.display_name, ctx.author.name, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Banned"), user.name, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), reason))
async def removeall(self, ctx): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) write = open(self.SAVELOC + 'cotd.txt', 'w') write.write('') write.close() await ctx.send(embed=func.Embed('The list has been cleared!'))
async def clear(self, ctx): if not await sql.isSupporter(ctx.author): return await ctx.send(embed=func.NoPerm()) if ctx.channel.id != self.spam_id: return await self.spam.send(f"{ctx.author.mention} Try here", delete_after=30) for roles in ctx.author.roles: if roles.id in self.color_roles: role = discord.utils.get(ctx.guild.roles, id=roles.id) await ctx.author.remove_roles(role) embed = func.Embed(f"**{ctx.author.name}** Cleared their color roles!") await ctx.send(embed=embed)
async def reset(self, ctx): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') msg = await ctx.send(embed=func.Embed('Resetting the list....')) st = '' for i in channellist: if i != '': try: trye = await self.bot.fetch_channel(int(i.split('|')[0])) st += '\n{}|0'.format(i.split('|')[0]) except: pass write = open(self.SAVELOC + 'cotd.txt', 'w') write.write(st) write.close() save = open(self.SAVELOC + 'cotdSave.txt', 'r').read().split('\n') try: returnchannel = await self.bot.fetch_channel(int(save[0])) returncategory = await self.bot.fetch_channel(int(save[2])) try: await returnchannel.edit(name=save[1], category=returncategory, position=int(save[3])) except: pass except: pass reset = open(self.SAVELOC + 'cotdSave.txt', 'w') reset.close() await msg.edit(embed=func.Embed('The list has been resetted!'))
async def remove(self, ctx, user: discord.User = None): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) if not user: return await ctx.send(embed=func.ErrorEmbed(f"Mention a user")) if sql.isStaff(user): if sql.DelAccess(user): await ctx.send( embed=func.Embed(f"Removed {user.mention}'s rights")) else: await ctx.send(embed=func.ErrorEmbed( "Something went wrong. Please try again")) else: await ctx.send( embed=func.ErrorEmbed("That user has no access rights"))
async def unload(self, ctx, cog: str = None): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) if not cog: return await ctx.send( embed=func.ErrorEmbed("Please name a cog to load")) if cog == "Commands": return await ctx.send( embed=func.ErrorEmbed("That is a required cog. Try another")) try: self.bot.unload_extension(f"modules.{cog}") await ctx.send( embed=func.Embed(f"{cog} was successfully unloaded.")) except Exception as error: await ctx.send(embed=func.ErrorEmbed(f"{cog} failed to unload")) func.log(error)
async def clear(self, ctx, amount: int = None): if not ctx.author.guild_permissions.manage_messages: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) await ctx.message.delete() if not amount or amount > 100 or amount < 1: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "Upto100")), delete_after=15) dela = await ctx.channel.purge(limit=amount) await ctx.send("{}: {}".format( Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Deleted"), len(dela)), delete_after=15)
async def remove(self, ctx, roleid: int = None): if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) if not roleid: return await ctx.send( embed=func.ErrorEmbed(f"Please provide me with a role ID")) role = discord.utils.get(ctx.guild.roles, id=roleid) if not role: return await ctx.send( embed=func.ErrorEmbed("I couldnt find that role")) if sql.delSupportRole(roleid): await ctx.send( embed=func.Embed(f"Removed {role.name} from the database")) else: await ctx.send( embed=func.ErrorEmbed("That role is not in the database"))
async def list(self, ctx): if not sql.isOwner(ctx.author.id): return await ctx.send(embed=func.NoPerm()) unformatted = sql.getallAccess() formatted = [] for i in unformatted: user = await self.bot.fetch_user(i[0]) if i[1] == 1: type = "Admin Access" if i[1] == 2: type = "Owner Access" formatted.append(f"{user.mention} - {type}") await ctx.send(embed=func.Embed("\n".join(formatted)))
async def shoob(self, ctx, event=None, duration=None, *args): if not await sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) if not event or not duration or not args: return await ctx.send(embed=func.Embed( f"If you want to start an event use the command like this:\n\n{ctx.prefix}shoob event [duration] [card]\n\nDurations: m, h, d, w" )) self.event["Reward"] = ' '.join(args) self.event["TotalDuration"] = self.timeformat(duration) self.event["Remaining"] = self.event["TotalDuration"] self.channel = ctx.channel embed = await self.EventMessage() self.event_message = await ctx.send(embed=embed) self.event["Started"] = True embed = await self.leaderboardsMessage() self.leaderboard_message = await ctx.send(embed=embed)
async def infractions(self, ctx, member: discord.Member = None): if not ctx.author.guild_permissions.manage_messages: return await ctx.send(embed=func.NoPerm(self, ctx.guild.id), delete_after=15) if not member: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "NoInfractionsUser")), delete_after=15) infr = sql.GetInfractions(ctx.guild.id, member.id) if not infr: return await ctx.send(embed=func.BadResponseEmbed( self, ctx.guild.id, "{} {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Errors", "HasNoInfractions"))), delete_after=15) embed = discord.Embed(colour=0x27b1db) for i in infr: u = await self.bot.fetch_user(i[3]) desc = "{} {} {} @ {} | {}: {}".format( member.mention, Language.get(ctx.guild.id, self.bot.cache, "Moderator", "WarnedBy"), u.mention, i[5], Language.get(ctx.guild.id, self.bot.cache, "Moderator", "Reason"), i[4]) embed.add_field(name="{}: {}".format( Language.get(ctx.guild.id, self.bot.cache, "Moderator", "InfractID"), i[0]), value=desc, inline=False) await ctx.send(embed=embed)
async def color(self, ctx, number=None): if not number.isdigit(): return if not await sql.isSupporter(ctx.author): return await ctx.send(embed=func.NoPerm()) if ctx.channel.id != self.spam_id: return await self.spam.send(f"{ctx.author.mention} Try here", delete_after=30) if not number or number < 1 or number > 15: embed = discord.Embed( title= f"Type {ctx.prefix}color <number> with the number you want", colour=discord.Colour(0xd42c2c), timestamp=datetime.datetime.utcfromtimestamp(1579828506)) embed.set_image(url="https://i.imgur.com/H8Wk8wG.png") return await ctx.send(embed=embed) for roles in ctx.author.roles: if roles.id in self.color_roles: role = discord.utils.get(ctx.guild.roles, id=roles.id) await ctx.author.remove_roles(role) roleid = self.color_roles[number - 1] role = discord.utils.get(ctx.guild.roles, id=roleid) await ctx.author.add_roles(role) embed = discord.Embed( title=f"Role Added", description=f"**{ctx.author.name}** obtained color {number}!", colour=discord.Colour(0xcf53ee)) embed.set_footer( text=f"Use `{ctx.prefix}colour clear` to remove your colour") await ctx.send(embed=embed)
async def cancel(self, ctx): if not await sql.isStaff(ctx.author): return ctx.send(embed=func.NoPerm())
async def _choosenow(self, ctx): if not ctx.guild: return if not ctx.guild.id == self.MAL_ID: return if not sql.isStaff(ctx.author): return await ctx.send(embed=func.NoPerm()) chooselist = [] channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') for i in channellist: if '|0' in i: chooselist.append(int(i.split('|')[0])) save = open(self.SAVELOC + 'cotdSave.txt', 'r').read().split('\n') if chooselist == []: try: returnchannel = await self.bot.fetch_channel(int(save[0])) returncategory = await self.bot.fetch_channel(int(save[2])) await ctx.send(embed=func.ErrorEmbed( 'Cant choose from complete or empty list')) try: await returnchannel.edit(name=save[1], category=returncategory, position=int(save[3])) except: pass except: pass channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') st = '' for i in channellist: if i != '': st += '\n{}|0'.format(i.split('|')[0]) write = open(self.SAVELOC + 'cotd.txt', 'w') write.write(st) write.close() reset = open(self.SAVELOC + 'cotdSave.txt', 'w') reset.close() chooselist = [] channellist = open(self.SAVELOC + 'cotd.txt', 'r').read().split('\n') for i in channellist: if '|0' in i: chooselist.append(int(i.split('|')[0])) save = open(self.SAVELOC + 'cotdSave.txt', 'r').read().split('\n') channel = await self.bot.fetch_channel(int(choice(chooselist))) st = '' for i, v in enumerate(channellist): if v.startswith(str(channel.id)): channellist[i] = f'{channel.id}|1' st += '\n%s' % (channellist[i]) write = open(self.SAVELOC + 'cotd.txt', 'w') write.write(st) write.close() if len(save) == 4: try: returnchannel = await self.bot.fetch_channel(int(save[0])) returncategory = await self.bot.fetch_channel(int(save[2])) except: pass try: await returnchannel.edit(name=save[1], category=returncategory, position=int(save[3])) except: pass new = open(self.SAVELOC + 'cotdSave.txt', 'w') new.write( f'{channel.id}\n{channel.name}\n{channel.category_id}\n{channel.position}' ) new.close() newname = '\N{tulip}\u30FB' for i in channel.name: if i in string.ascii_letters or i == '-': newname += i try: await ctx.send(embed=func.Embed(f'Chose {channel.name}')) await channel.edit(name=newname, category=None) pingrole = discord.utils.get(discord.utils.get( self.bot.guilds, id=self.MAL_ID).roles, id=self.pingroleid) await pingrole.edit(mentionable=True) await channel.send(f'{pingrole.mention}', delete_after=2) await pingrole.edit(mentionable=False) except: return