async def setxpreserve(self, ctx, *, member=None, xpAmount: int = None): """Set's an absolute value for the member's xp reserve (admin only).""" author = ctx.message.author server = ctx.message.guild channel = ctx.message.channel usage = 'Usage: `{}setxpreserve [member] [amount]`'.format(ctx.prefix) # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions"): suppress = True else: suppress = False if not await Utils.is_admin_reply(ctx): return if member == None: await ctx.message.channel.send(usage) return if xpAmount == None: # Check if we have trailing xp nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck or nameCheck['Member'] is None: nameCheck = DisplayName.checkRoleForInt(member, server) if not nameCheck: await ctx.message.channel.send(usage) return if "Role" in nameCheck: mem = nameCheck["Role"] else: mem = nameCheck["Member"] exp = nameCheck["Int"] if not mem: msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) await ctx.message.channel.send(msg) return member = mem xpAmount = exp # Check for formatting issues if xpAmount == None: # Still no xp... await channel.send(usage) return if type(member) is discord.Member: self.settings.setUserStat(member, server, "XPReserve", xpAmount) else: for m in ctx.guild.members: if member in m.roles: self.settings.setUserStat(m, server, "XPReserve", xpAmount) msg = '*{}\'s* XPReserve was set to *{:,}!*'.format( DisplayName.name(member), xpAmount) await channel.send(msg)
async def setstrikelevel(self, ctx, *, member = None, strikelevel : int = None): """Sets the strike level of the passed user (bot-admin only).""" isAdmin = ctx.message.author.permissions_in(ctx.message.channel).administrator if not isAdmin: checkAdmin = self.settings.getServerStat(ctx.message.guild, "AdminArray") for role in ctx.message.author.roles: for aRole in checkAdmin: # Get the role that corresponds to the id if str(aRole['ID']) == str(role.id): isAdmin = True # Only allow admins to change server stats if not isAdmin: await ctx.channel.send('You do not have sufficient privileges to access this command.') return author = ctx.message.author server = ctx.message.guild channel = ctx.message.channel # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions").lower() == "yes": suppress = True else: suppress = False usage = 'Usage: `{}setstrikelevel [member] [strikelevel]`'.format(ctx.prefix) if member == None: await ctx.channel.send(usage) return # Check for formatting issues if strikelevel == None: # Either strike level wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await ctx.channel.send(usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) await ctx.channel.send(msg) return member = nameCheck["Member"] strikelevel = nameCheck["Int"] if strikelevel == None: # Still no strike level await ctx.channel.send(usage) return self.settings.setUserStat(member, ctx.message.guild, "StrikeLevel", strikelevel) msg = '*{}\'s* strike level has been set to *{}!*'.format(DisplayName.name(member), strikelevel) await ctx.channel.send(msg)
async def setxp(self, ctx, *, member=None, xpAmount: int = None): """Sets an absolute value for the member's xp (admin only).""" author = ctx.message.author server = ctx.message.server channel = ctx.message.channel usage = 'Usage: `{}setxp [member] [amount]`'.format(ctx.prefix) # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions").lower() == "yes": suppress = True else: suppress = False isAdmin = author.permissions_in(channel).administrator # Only allow admins to change server stats if not isAdmin: await self.bot.send_message( channel, 'You do not have sufficient privileges to access this command.' ) return if member == None: await self.bot.send_message(ctx.message.channel, usage) return if xpAmount == None: # Check if we have trailing xp nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await self.bot.send_message(ctx.message.channel, usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(ctx.message.channel, msg) return member = nameCheck["Member"] xpAmount = nameCheck["Int"] # Check for formatting issues if xpAmount == None: # Still no xp... await self.bot.send_message(channel, usage) return self.settings.setUserStat(member, server, "XP", xpAmount) msg = '*{}\'s* xp was set to *{}!*'.format(DisplayName.name(member), xpAmount) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(channel, msg) await CheckRoles.checkroles(member, channel, self.settings, self.bot)
async def setxp(self, ctx, *, member = None, xpAmount : int = None): """Sets an absolute value for the member's xp (admin only).""" author = ctx.message.author server = ctx.message.guild channel = ctx.message.channel usage = 'Usage: `{}setxp [member] [amount]`'.format(ctx.prefix) # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions"): suppress = True else: suppress = False isAdmin = author.permissions_in(channel).administrator # Only allow admins to change server stats if not isAdmin: await channel.send('You do not have sufficient privileges to access this command.') return if member == None: await ctx.message.channel.send(usage) return if xpAmount == None: # Check if we have trailing xp nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck or nameCheck['Member'] is None: nameCheck = DisplayName.checkRoleForInt(member, server) if not nameCheck: await ctx.message.channel.send(usage) return if "Role" in nameCheck: mem = nameCheck["Role"] else: mem = nameCheck["Member"] exp = nameCheck["Int"] if not mem: msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) await ctx.message.channel.send(msg) return member = mem xpAmount = exp # Check for formatting issues if xpAmount == None: # Still no xp... await channel.send(usage) return if type(member) is discord.Member: self.settings.setUserStat(member, server, "XP", xpAmount) else: for m in ctx.guild.members: if member in m.roles: self.settings.setUserStat(m, server, "XP", xpAmount) msg = '*{}\'s* xp was set to *{:,}!*'.format(DisplayName.name(member), xpAmount) # Check for suppress if suppress: msg = Nullify.clean(msg) await channel.send(msg) await CheckRoles.checkroles(member, channel, self.settings, self.bot)
async def torment(self, ctx, *, member=None, times: int = None): """Deals some vigilante justice (owner only).""" channel = ctx.message.channel author = ctx.message.author server = ctx.message.guild message = ctx.message # Only allow owner to change server stats isOwner = self.settings.isOwner(ctx.author) if isOwner == None: return elif isOwner == False: return usage = 'Usage: `{}torment [role/member] [times]`'.format(ctx.prefix) isRole = False if member == None: await ctx.channel.send(usage) return # Check for formatting issues if times == None: # Either xp wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues roleCheck = DisplayName.checkRoleForInt(member, server) if roleCheck and roleCheck["Role"]: isRole = True member = roleCheck["Role"] times = roleCheck["Int"] else: # Role is invalid - check for member instead nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await ctx.channel.send(usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find that user or role on the server.'.format( member) await ctx.channel.send(msg) return member = nameCheck["Member"] times = nameCheck["Int"] # Set the torment flag self.toTorment = True if times == None: # Still no times - roll back to default times = 25 if times > 100: times = 100 if times == 0: await ctx.channel.send( 'Oooooh - I bet they feel *sooooo* tormented...') return if times < 0: await ctx.channel.send('I just uh... *un-tormented* them. Yeah.') return # Delete original torment message await message.delete() for i in range(0, times): # Do this over time try: if member.name == "@everyone" and type(member) is discord.Role: await channel.send("{}".format(member.name)) else: await channel.send('{}'.format(member.mention)) except Exception: pass for j in range(0, self.waitBetween): # Wait for 1 second, then check if we should cancel - then wait some more await asyncio.sleep(1) if not self.toTorment: return
async def stealthservertorment(self, ctx, *, member=None, times: int = None): """Deals some sneaky vigilante justice in all channels (owner only).""" channel = ctx.message.channel author = ctx.message.author server = ctx.message.server message = ctx.message # Only allow owner to change server stats serverDict = self.settings.serverDict try: owner = serverDict['Owner'] except KeyError: owner = None if owner == None: # No owner set return else: if not author.id == owner: return usage = 'Usage: `{}torment [role/member] [times]`'.format(ctx.prefix) isRole = False if member == None: await self.bot.send_message(ctx.message.channel, usage) return # Check for formatting issues if times == None: # Either xp wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues roleCheck = DisplayName.checkRoleForInt(member, server) if roleCheck and roleCheck["Role"]: isRole = True member = roleCheck["Role"] times = roleCheck["Int"] else: # Role is invalid - check for member instead nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await self.bot.send_message(ctx.message.channel, usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find that user or role on the server.'.format( member) await self.bot.send_message(ctx.message.channel, msg) return member = nameCheck["Member"] times = nameCheck["Int"] # Set the torment flag self.toTorment = True if times == None: # Still no times - roll back to default times = 25 if times > 100: times = 100 if times == 0: await self.bot.send_message( ctx.message.channel, 'Oooooh - I bet they feel *sooooo* tormented...') return if times < 0: await self.bot.send_message( ctx.message.channel, 'I just uh... *un-tormented* them. Yeah.') return # Delete original torment message await self.bot.delete_message(message) for i in range(0, times): # Do this over time for channel in server.channels: # Get user's permissions if channel.permissions_for( member ).read_messages and channel.type is discord.ChannelType.text: # Only ping where they can read try: tmessage = await self.bot.send_message( channel, '*{}*'.format(member.mention)) await self.bot.delete_message(tmessage) except Exception: pass for j in range(0, self.waitBetween): # Wait for 1 second, then check if we should cancel - then wait some more await asyncio.sleep(1) if not self.toTorment: return
async def xp(self, ctx, *, member=None, xpAmount: int = None): """Gift xp to other members.""" author = ctx.message.author server = ctx.message.server channel = ctx.message.channel # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions").lower() == "yes": suppress = True else: suppress = False usage = 'Usage: `{}xp [role/member] [amount]`'.format(ctx.prefix) isRole = False if member == None: await self.bot.send_message(ctx.message.channel, usage) return # Check for formatting issues if xpAmount == None: # Either xp wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues roleCheck = DisplayName.checkRoleForInt(member, server) if not roleCheck: # Returned nothing - means there isn't even an int msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(ctx.message.channel, msg) return if roleCheck["Role"]: isRole = True member = roleCheck["Role"] xpAmount = roleCheck["Int"] else: # Role is invalid - check for member instead nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await self.bot.send_message(ctx.message.channel, usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find *{}* on the server.'.format( member) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(ctx.message.channel, msg) return member = nameCheck["Member"] xpAmount = nameCheck["Int"] if xpAmount == None: # Still no xp await self.bot.send_message(ctx.message.channel, usage) return if not type(xpAmount) is int: await self.bot.send_message(ctx.message.channel, usage) return # Get our user/server stats isAdmin = author.permissions_in(channel).administrator adminUnlim = self.settings.getServerStat(server, "AdminUnlimited") reserveXP = self.settings.getUserStat(author, server, "XPReserve") requiredXP = self.settings.getServerStat(server, "RequiredXPRole") approve = True decrement = True # RequiredXPRole if requiredXP: foundRole = False for checkRole in author.roles: if checkRole.id == requiredXP: foundRole = True if not foundRole: approve = False msg = msg = 'You don\'t have the permissions to give xp.' if xpAmount > int(reserveXP): approve = False msg = 'You can\'t give *{} xp*, you only have *{}!*'.format( xpAmount, reserveXP) if author == member: approve = False msg = 'You can\'t give yourself xp! *Nice try...*' if xpAmount < 0: msg = 'Only admins can take away xp!' approve = False if xpAmount == 0: msg = 'Wow, very generous of you...' approve = False # Check admin last - so it overrides anything else if isAdmin and adminUnlim.lower() == "yes": # No limit - approve approve = True decrement = False if approve: if isRole: # XP was approved - let's iterate through the users of that role, # starting with the lowest xp # # Work through our members memberList = [] sMemberList = self.settings.getServerStat(server, "Members") for amem in server.members: if amem == author: continue roles = amem.roles if member in roles: # This member has our role # Add to our list for smem in sMemberList: # Find our server entry if smem["ID"] == amem.id: # Add it. memberList.append(smem) memSorted = sorted(memberList, key=lambda x: int(x['XP'])) if len(memSorted): # There actually ARE members in said role totalXP = xpAmount if xpAmount > len(memSorted): # More xp than members leftover = xpAmount % len(memSorted) eachXP = (xpAmount - leftover) / len(memSorted) for i in range(0, len(memSorted)): cMember = DisplayName.memberForID( memSorted[i]['ID'], server) if leftover > 0: self.settings.incrementStat( cMember, server, "XP", eachXP + 1) leftover -= 1 else: self.settings.incrementStat( cMember, server, "XP", eachXP) await CheckRoles.checkroles( cMember, channel, self.settings, self.bot) else: for i in range(0, xpAmount): cMember = DisplayName.memberForID( memSorted[i]['ID'], server) self.settings.incrementStat( cMember, server, "XP", 1) await CheckRoles.checkroles( cMember, channel, self.settings, self.bot) # Decrement if needed if decrement: self.settings.incrementStat(author, server, "XPReserve", (-1 * xpAmount)) msg = '*{} collective xp* was given to *{}!*'.format( totalXP, member.name) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(channel, msg) else: msg = 'There are no eligible members in *{}!*'.format( member.name) await self.bot.send_message(channel, msg) else: # Decrement if needed if decrement: self.settings.incrementStat(author, server, "XPReserve", (-1 * xpAmount)) # XP was approved! Let's say it - and check decrement from gifter's xp reserve msg = '*{}* was given *{} xp!*'.format( DisplayName.name(member), xpAmount) # Check for suppress if suppress: msg = Nullify.clean(msg) await self.bot.send_message(channel, msg) self.settings.incrementStat(member, server, "XP", xpAmount) # Now we check for promotions await CheckRoles.checkroles(member, channel, self.settings, self.bot) else: await self.bot.send_message(channel, msg)
async def setstrikelevel(self, ctx, *, member=None, strikelevel: int = None): """Mengatur level strike untuk user (admin only).""" isAdmin = ctx.message.author.permissions_in( ctx.message.channel).administrator if not isAdmin: checkAdmin = self.settings.getServerStat(ctx.message.guild, "AdminArray") for role in ctx.message.author.roles: for aRole in checkAdmin: # Get the role that corresponds to the id if str(aRole['ID']) == str(role.id): isAdmin = True # Only allow admins to change server stats if not isAdmin: msg = '┐( ̄ヘ ̄;)┌\nKamu tidak memiliki hak untuk menggunakan command ini.' em = discord.Embed(color=0XFF8C00, description=msg) em.set_footer(text="{}".format(ctx.author), icon_url="{}".format(ctx.author.avatar_url)) await ctx.channel.send(embed=em) return author = ctx.message.author server = ctx.message.guild channel = ctx.message.channel # Check if we're suppressing @here and @everyone mentions if self.settings.getServerStat(server, "SuppressMentions"): suppress = True else: suppress = False em = discord.Embed( color=0XFF8C00, description="> Mengatur level strike untuk user (admin only)\n" "> **Panduan**\n" "> `{}setstrikelevel [member] [strikelevel]`".format(ctx.prefix)) em.set_author( name="Admin lock off", url="https://acinonyxesports.com", icon_url= "https://cdn.discordapp.com/attachments/518118753226063887/725569194304733435/photo.jpg" ) em.set_footer( text= "Saat mengetik command, tanda [] tidak usah digunakan\nRequest by : {}" .format(ctx.author.name), icon_url="{}".format(ctx.author.avatar_url)) if member == None: await ctx.channel.send(embed=em) return # Check for formatting issues if strikelevel == None: # Either strike level wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await ctx.channel.send(embed=em) return if not nameCheck["Member"]: msg = 'I couldn\'t find *{}* on the server.'.format(member) # Check for suppress if suppress: msg = Nullify.clean(msg) em = discord.Embed(color=0XFF8C00, description=msg) em.set_footer(text="{}".format(ctx.author), icon_url="{}".format(ctx.author.avatar_url)) await ctx.channel.send(embed=em) return member = nameCheck["Member"] strikelevel = nameCheck["Int"] if strikelevel == None: # Still no strike level await ctx.channel.send(embed=em) return self.settings.setUserStat(member, ctx.message.guild, "StrikeLevel", strikelevel) msg = 'Strike level untuk *{}* telah dirubah menjadi *{}!*'.format( DisplayName.name(member), strikelevel) em = discord.Embed(color=0XFF8C00, description=msg) em.set_footer(text="{}".format(ctx.author), icon_url="{}".format(ctx.author.avatar_url)) await ctx.channel.send(embed=em)
async def torment(self, ctx, *, member=None, times: int = None): """Deals some vigilante justice (owner only).""" channel = ctx.message.channel author = ctx.message.author server = ctx.message.server # Only allow owner to change server stats serverDict = self.settings.serverDict try: owner = serverDict['Owner'] except KeyError: owner = None if owner == None: # No owner set msg = 'I have not been claimed, *yet*.' await self.bot.send_message(channel, msg) return else: if not author.id == owner: msg = 'You are not the *true* owner of me. Only the rightful owner can use this command.' await self.bot.send_message(channel, msg) return usage = 'Usage: `{}torment [role/member] [times]`'.format(ctx.prefix) isRole = False if member == None: await self.bot.send_message(ctx.message.channel, usage) return # Check for formatting issues if times == None: # Either xp wasn't set - or it's the last section if type(member) is str: # It' a string - the hope continues roleCheck = DisplayName.checkRoleForInt(member, server) if roleCheck and roleCheck["Role"]: isRole = True member = roleCheck["Role"] times = roleCheck["Int"] else: # Role is invalid - check for member instead nameCheck = DisplayName.checkNameForInt(member, server) if not nameCheck: await self.bot.send_message(ctx.message.channel, usage) return if not nameCheck["Member"]: msg = 'I couldn\'t find that user or role on the server.'.format( member) await self.bot.send_message(ctx.message.channel, msg) return member = nameCheck["Member"] times = nameCheck["Int"] # Set the torment flag self.toTorment = True if times == None: # Still no times - roll back to default times = 25 if times > 100: times = 100 if times == 0: await self.bot.send_message( ctx.message.channel, 'Oooooh - I bet they feel *sooooo* tormented...') return if times < 0: await self.bot.send_message( ctx.message.channel, 'I just uh... *un-tormented* them. Yeah.') return for i in range(0, times): # Do this over time await self.bot.send_message(ctx.message.channel, '*{}*'.format(member.mention)) for j in range(0, self.waitBetween): # Wait for 1 second, then check if we should cancel - then wait some more await asyncio.sleep(1) if not self.toTorment: return