Beispiel #1
0
    async def removemotd(self, ctx, *, chan=None):
        """Removes the message of the day from the selected channel."""

        channel = ctx.message.channel
        author = ctx.message.author
        server = ctx.message.guild

        usage = 'Usage: `{}broadcast [message]`'.format(ctx.prefix)

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        if not await Utils.is_admin_reply(ctx): return
        if chan == None:
            chan = channel
        if type(chan) is str:
            try:
                chan = discord.utils.get(server.channels, name=chan)
            except:
                print("That channel does not exist")
                return
        # At this point - we should have the necessary stuff
        motdArray = self.settings.getServerStat(server, "ChannelMOTD")
        for a in motdArray:
            # Get the channel that corresponds to the id
            if str(a['ID']) == str(chan.id):
                # We found it - throw an error message and return
                motdArray.remove(a)
                self.settings.setServerStat(server, "ChannelMOTD", motdArray)

                msg = 'MOTD for *{}* removed.'.format(channel.name)
                await channel.send(msg)
                await channel.edit(topic=None)
                await self.updateMOTD()
                return
        msg = 'MOTD for *{}* not found.'.format(chan.name)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        await channel.send(msg)
Beispiel #2
0
    async def _welcome(self, member, server, channel = None):
        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(server, "SuppressMentions"):
            suppress = True
        else:
            suppress = False
        message = self.settings.getServerStat(server, "Welcome")
        if message in (None,""):
            return
        # Let's regex and replace [[user]] [[atuser]] and [[server]]
        message = re.sub(self.regexUserName, "{}".format(DisplayName.name(member)), message)
        message = re.sub(self.regexUserPing, "{}".format(member.mention), message)
        message = re.sub(self.regexServer,   "{}".format(self.suppressed(server, server.name)), message)
        message = re.sub(self.regexCount,    "{:,}".format(len(server.members)), message)
        # Get place info
        place_str = str(len(server.members))
        end_str = "th"
        if place_str.endswith("1") and not place_str.endswith("11"):
            end_str = "st"
        elif place_str.endswith("2") and not place_str.endswith("12"):
            end_str = "nd"
        elif place_str.endswith("3") and not place_str.endswith("13"):
            end_str = "rd"
        message = re.sub(self.regexPlace,    "{:,}{}".format(len(server.members), end_str), message)
        # Get online users
        online_count = 0
        for m in server.members:
            if not m.status == discord.Status.offline:
                online_count += 1
        message = re.sub(self.regexOnline,    "{:,}".format(online_count), message)
                
        if suppress:
            message = Nullify.clean(message)

        if channel:
            await channel.send(message)
        else:
            try:
                if self._getDefault(server):
                    # Only message if we can
                    await self._getDefault(server).send(message)
            except Exception:
                pass
Beispiel #3
0
	async def blocked(self, ctx):
		"""Lists all blocked servers and owners (owner-only)."""
		# Check if we're suppressing @here and @everyone mentions
		suppress = True if self.settings.getServerStat(ctx.guild,"SuppressMentions",True) else False
		# Only allow owner
		isOwner = self.settings.isOwner(ctx.author)
		if isOwner == None:
			return await ctx.send('I have not been claimed, *yet*.')
		elif isOwner == False:
			return await ctx.send('You are not the *true* owner of me.  Only the rightful owner can use this command.')
		serverList = self.settings.getGlobalStat('BlockedServers',[])
		if not len(serverList):
			msg = "There are no blocked servers or owners!"
		else:
			msg = "__Currently Blocked:__\n\n{}".format(', '.join(serverList))
		# Check for suppress
		if suppress:
			msg = Nullify.clean(msg)
		await ctx.send(msg)
Beispiel #4
0
    async def vkclear(self, ctx, *, user=None):
        """Clears the votes against the passed user (bot-admin only)."""
        # Check if we're trying to kick an admin
        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

        if user == None:
            await ctx.send("Usage: `{}vkclear [user]`".format(ctx.prefix))
            return

        check_user = DisplayName.memberForName(user, ctx.guild)
        if not check_user:
            await ctx.send("I couldn't find *{}*...".format(
                Nullify.clean(user)))
            return

        vote_list = self.settings.getServerStat(ctx.guild, "VoteKickArray")
        for member in vote_list:
            if member["ID"] == check_user.id:
                vote_list.remove(member)
                self.settings.setServerStat(ctx.guild, "VoteKickArray",
                                            vote_list)
                await ctx.send(
                    "All votes against *{}* have been removed.".format(
                        DisplayName.name(check_user)))
                return
        await ctx.send(
            "*{}* has no votes against them - nothing to clear.".format(
                DisplayName.name(check_user)))
Beispiel #5
0
    async def info(self, ctx):
        """Displays the server info if any."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        serverInfo = self.settings.getServerStat(ctx.message.guild, "Info")
        msg = 'I have no info on *{}* yet.'.format(ctx.message.guild.name)
        if serverInfo:
            msg = '*{}*:\n\n{}'.format(ctx.message.guild.name, serverInfo)

        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)

        await ctx.channel.send(msg)
Beispiel #6
0
    async def setkillrole(self, ctx, role: discord.Role = None):
        """Sets the required role ID to add/remove hacks (admin only)."""

        channel = ctx.message.channel
        author = ctx.message.author
        server = ctx.message.guild

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "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 role == None:
            self.settings.setServerStat(server, "RequiredKillRole", "")
            msg = 'Kill/resurrect now *admin-only*.'
            await channel.send(msg)
            return

        if type(role) is str:
            try:
                role = discord.utils.get(server.roles, name=role)
            except:
                print("That role does not exist")
                return

        # If we made it this far - then we can add it
        self.settings.setServerStat(server, "RequiredKillRole", role.id)

        msg = 'Role required for kill/resurrect set to **{}**.'.format(
            role.name)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        await channel.send(msg)
Beispiel #7
0
    async def listadmin(self, ctx):
        """Lists admin roles and id's."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.server,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False

        promoArray = self.settings.getServerStat(ctx.message.server,
                                                 "AdminArray")

        # rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))

        promoSorted = sorted(promoArray, key=itemgetter('Name'))

        if not len(promoSorted):
            roleText = "There are no admin roles set yet.  Use `{}addadmin [role]` to add some.".format(
                ctx.prefix)
            await self.bot.send_message(ctx.message.channel, roleText)
            return

        roleText = "Current Admin Roles:\n"

        for arole in promoSorted:
            found = False
            for role in ctx.message.server.roles:
                if role.id == arole["ID"]:
                    # Found the role ID
                    found = True
                    roleText = '{}**{}** (ID : `{}`)\n'.format(
                        roleText, role.name, arole['ID'])
            if not found:
                roleText = '{}**{}** (removed from server)\n'.format(
                    roleText, arole['Name'])

        # Check for suppress
        if suppress:
            roleText = Nullify.clean(roleText)

        await self.bot.send_message(ctx.message.channel, roleText)
Beispiel #8
0
    async def listxpblock(self, ctx):
        """Lists xp blocked users and roles."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        promoArray = self.settings.getServerStat(ctx.message.guild, "XpBlockArray")

        # rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))

        #promoSorted = sorted(promoArray, key=itemgetter('Name'))

        if not len(promoArray):
            roleText = "There are no users or roles xp blocked yet.  Use `{}xpblock [user_or_role]` to add some.".format(ctx.prefix)
            await ctx.channel.send(roleText)
            return

        roleText = "__**Current Xp Blocked Users and Roles:**__\n\n"

        for arole in promoArray:
            test = DisplayName.memberForID(arole, ctx.guild)
            if test:
                # It's a user
                roleText = roleText + "**{}**, ".format(DisplayName.name(test))
                continue
            test = DisplayName.roleForID(arole, ctx.guild)
            if test:
                # It's a role
                roleText = roleText + "**{}** (Role), ".format(test.name)
                continue
            # Didn't find a role or person
            roleText = roleText + "**{}** (removed from server), ".format(arole)

        roleText = roleText[:-2]
        # Check for suppress
        if suppress:
            roleText = Nullify.clean(roleText)

        await ctx.channel.send(roleText)
Beispiel #9
0
    async def define(self, ctx, *, word: str = None):
        """Gives the definition of the word passed."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        if not word:
            msg = 'Usage: `{}define [word]`'.format(ctx.prefix)
            await ctx.channel.send(msg)
            return
        url = "http://api.urbandictionary.com/v0/define?term={}".format(
            quote(word))
        msg = 'I couldn\'t find a definition for "{}"...'.format(word)
        title = permalink = None
        theJSON = await DL.async_json(url, headers={'User-agent': self.ua})
        theJSON = theJSON["list"]
        if len(theJSON):
            # Got it - let's build our response
            if self.random:
                ourWord = random.choice(theJSON)
            else:
                ourWord = theJSON[0]
            msg = '__**{}:**__\n\n{}'.format(string.capwords(ourWord["word"]),
                                             ourWord["definition"])
            if ourWord["example"]:
                msg = '{}\n\n__**Example(s):**__\n\n*{}*'.format(
                    msg, ourWord["example"])
            permalink = ourWord["permalink"]
            title = "Urban Dictionary Link"

        # await ctx.channel.send(msg)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        # await Message.Message(message=msg).send(ctx)
        await Message.EmbedText(title=title,
                                description=msg,
                                color=ctx.author,
                                url=permalink).send(ctx)
Beispiel #10
0
	async def pcpp(self, ctx, url = None, style = None, escape = None):
		"""Convert a pcpartpicker.com link into markdown parts. Available styles: normal, md, mdblock, bold, and bolditalic."""
		usage = "Usage: `{}pcpp [url] [style=normal, md, mdblock, bold, bolditalic] [escape=yes/no (optional)]`".format(ctx.prefix)

		# Check if we're suppressing @here and @everyone mentions
		if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
			suppress = True
		else:
			suppress = False

		if not style:
			style = 'normal'
		
		if not url:
			await ctx.channel.send(usage)
			return

		if escape == None:
			escape = 'no'
		escape = escape.lower()

		if escape == 'yes' or escape == 'true' or escape == 'on':
			escape = True
		else:
			escape = False
		
		output = await PCPP.getMarkdown(url, style, escape)
		if not output:
			msg = 'Something went wrong!  Make sure you use a valid pcpartpicker link.'
			await ctx.channel.send(msg)
			return
		if len(output) > 2000:
			msg = "That's an *impressive* list of parts - but the max length allowed for messages in Discord is 2000 characters, and you're at *{}*.".format(len(output))
			msg += '\nMaybe see if you can prune up that list a bit and try again?'
			await ctx.channel.send(msg)
			return

		# Check for suppress
		if suppress:
			msg = Nullify.clean(output)
		await ctx.channel.send(output)
Beispiel #11
0
    async def _chat(self, channel, server, message):
        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(server,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False
        if message == None:
            return
        if not self.canChat(server):
            return
        await self.bot.send_typing(channel)

        msg = self.chatBot.respond(message)

        if not msg:
            msg = "I didn't understand that.  Sorry."
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        await self.bot.send_message(channel, msg)
Beispiel #12
0
    async def tags(self, ctx):
        """List all tags in the tags list."""

        channel = ctx.message.channel
        author  = ctx.message.author
        server  = ctx.message.guild

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        argList = ctx.message.content.split()

        if len(argList) > 1:
            extraArgs = ' '.join(argList[1:len(argList)])
            # We have a random attempt at a passed variable - Thanks Sydney!
            # Invoke this command again with the right name
            await ctx.invoke(self.tag, name=extraArgs)
            return

        tagList = self.settings.getServerStat(server, "Tags")
        if tagList == None or tagList == []:
            msg = 'No tags in list!  You can add some with the `{}addtag "[tag name]" [tag]` command!'.format(ctx.prefix)
            await channel.send(msg)
            return

        # Sort by tag name
        sep = "\n"
        tagList = sorted(tagList, key=lambda x:x['Name'].lower())
        tagText = "Current Tags:\n\n"
        for atag in tagList:
            tagText = '{}*{}*{}'.format(tagText, atag['Name'], sep)

        # Speak the tag list while cutting off the end ", "
        # Check for suppress
        if suppress:
            tagText = Nullify.clean(tagText)
        await Message.Message(message=tagText[:-len(sep)]).send(ctx)
Beispiel #13
0
    async def listdj(self, ctx):
        """Lists dj roles and id's."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        promoArray = self.settings.getServerStat(ctx.message.guild, "DJArray")

        # rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))

        promoSorted = sorted(promoArray, key=itemgetter('Name'))

        if not len(promoSorted):
            roleText = "There are no dj roles set yet.  Use `{}adddj [role]` to add some.".format(
                ctx.prefix)
            await ctx.channel.send(roleText)
            return

        roleText = "__**Current DJ Roles:**__\n\n"

        for arole in promoSorted:
            found = False
            for role in ctx.message.guild.roles:
                if str(role.id) == str(arole["ID"]):
                    # Found the role ID
                    found = True
                    roleText = '{}**{}** (ID : `{}`)\n'.format(
                        roleText, role.name, arole['ID'])
            if not found:
                roleText = '{}**{}** (removed from server)\n'.format(
                    roleText, arole['Name'])

        # Check for suppress
        if suppress:
            roleText = Nullify.clean(roleText)

        await ctx.channel.send(roleText)
Beispiel #14
0
    async def sharedservers(self, ctx, *, member=None):
        """Lists how many servers you share with the bot."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        if member == None:
            member = ctx.author

        if type(member) is str:
            member_check = DisplayName.memberForName(member, ctx.guild)
            if not member_check:
                msg = "I couldn't find *{}* on this server...".format(member)
                if suppress:
                    msg = Nullify.clean(msg)
                await ctx.send(msg)
                return
            member = member_check

        if member.id == self.bot.user.id:
            return await ctx.send("I'm on *{:,}* server{}. :blush:".format(
                len(self.bot.guilds),
                "" if len(self.bot.guilds) == 1 else "s"))

        count = 0
        for guild in self.bot.guilds:
            for mem in guild.members:
                if mem.id == member.id:
                    count += 1
        if ctx.author.id == member.id:
            targ = "You share"
        else:
            targ = "*{}* shares".format(DisplayName.name(member))

        await ctx.send("{} *{:,}* server{} with me. :blush:".format(
            targ, count, "" if count == 1 else "s"))
Beispiel #15
0
	async def setparts(self, ctx, *, parts : str = None):
		"""Set your own parts - can be a url, formatted text, or nothing to clear."""
		
		channel = ctx.message.channel
		author  = ctx.message.author
		server  = ctx.message.server

		# Check if we're suppressing @here and @everyone mentions
		if self.settings.getServerStat(ctx.message.server, "SuppressMentions").lower() == "yes":
			suppress = True
		else:
			suppress = False

		if not parts:
			parts = ""
			
		self.settings.setUserStat(author, server, "Parts", parts)
		msg = '*{}\'s* parts have been set to:\n{}'.format(DisplayName.name(author), parts)
		# Check for suppress
		if suppress:
			msg = Nullify.clean(msg)
		await self.bot.send_message(channel, msg)
Beispiel #16
0
    async def holy(self, ctx, *, subject: str = None):
        """Time to backup the Batman!"""

        if subject == None:
            await ctx.channel.send("Usage: `{}holy [subject]`".format(
                ctx.prefix))
            return

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False

        matchList = []
        for a in self.adj:
            if a[:1].lower() == subject[:1].lower():
                matchList.append(a)

        if not len(matchList):
            # Nothing in there - get random entry
            # msg = "*Whoah there!* That was *too* holy for Robin!"
            word = random.choice(self.adj)
            word = word.strip().capitalize()
            subject = subject.strip().capitalize()
            msg = "*Holy {} {}, Batman!*".format(word, subject)
        else:
            # Get a random one
            word = random.choice(matchList)
            word = word.strip().capitalize()
            subject = subject.strip().capitalize()
            msg = "*Holy {} {}, Batman!*".format(word, subject)

        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)

        await ctx.channel.send(msg)
Beispiel #17
0
    async def randefine(self, ctx):
        """Gives a random word and its definition."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        url = "http://api.urbandictionary.com/v0/random"
        title = permalink = None
        theJSON = await DL.async_json(url, headers={'User-agent': self.ua})
        theJSON = theJSON["list"]
        if len(theJSON):
            # Got it - let's build our response
            x = random.choice(theJSON)
            value = x["definition"]
            if x["example"]:
                ex = x["example"].replace("*", "")
                lines = [
                    "*{}*".format(y.strip()) if len(y.strip()) else ""
                    for y in ex.split("\n")
                ]
                value += "\n\n__Example(s):__\n\n{}".format("\n".join(lines))
            words = [{
                "name":
                "{} - by {} ({} 👍 / {} 👎)".format(string.capwords(x["word"]),
                                                  x["author"], x["thumbs_up"],
                                                  x["thumbs_down"]),
                "value":
                value
            }]
            return await PickList.PagePicker(title="Results For: {}".format(
                string.capwords(x["word"])),
                                             list=words,
                                             ctx=ctx,
                                             max=1,
                                             url=x["permalink"]).pick()
        await ctx.send(Nullify.clean(msg))
Beispiel #18
0
	async def shrug(self, ctx, *, message : str = None):
		"""Shrug it off."""

		# Check if we're suppressing @here and @everyone mentions
		if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
			suppress = True
		else:
			suppress = False

		# Log the user
		self.settings.setServerStat(ctx.message.guild, "LastShrug", ctx.message.author.id)

		msg = "¯\_(ツ)_/¯"
		if message:
			msg += "\n{}".format(message)
		# Check for suppress
		if suppress:
			msg = Nullify.clean(msg)
		# Send new message first, then delete original
		await ctx.channel.send(msg)
		# Remove original message
		await ctx.message.delete()
Beispiel #19
0
 async def _chat(self, channel, server, message):
     # Check if we're suppressing @here and @everyone mentions
     if self.settings.getServerStat(server,
                                    "SuppressMentions").lower() == "yes":
         suppress = True
     else:
         suppress = False
     if message == None:
         return
     if not self.canChat(server):
         return
     await self.bot.send_typing(channel)
     message = message.replace('/', '')
     quotes = urllib.parse.quote(message)
     url = "http://127.0.0.1:5000/chat/" + quotes
     msg = requests.get(url).text
     if not msg:
         return
     # Check for suppress
     if suppress:
         msg = Nullify.clean(msg)
     await self.bot.send_message(channel, msg)
Beispiel #20
0
    async def _goodbye(self, member, server, channel=None):
        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(server,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False
        message = self.settings.getServerStat(server, "Goodbye")
        if message == None:
            return
        # Let's regex and replace [[user]] [[atuser]] and [[server]]
        message = re.sub(self.regexUserName,
                         "{}".format(DisplayName.name(member)), message)
        message = re.sub(self.regexUserPing, "{}".format(member.mention),
                         message)
        message = re.sub(self.regexServer, "{}".format(server.name), message)

        if suppress:
            message = Nullify.clean(message)
        if channel:
            await self.bot.send_message(channel, message)
        else:
            await self.bot.send_message(server.default_channel, message)
Beispiel #21
0
 async def _logEvent(self, server, log_message, filename=None):
     # Here's where we log our info
     # Check if we're suppressing @here and @everyone mentions
     if self.settings.getServerStat(server,
                                    "SuppressMentions").lower() == "yes":
         suppress = True
     else:
         suppress = False
     # Get log channel
     logChanID = self.settings.getServerStat(server, "LogChannel")
     if not logChanID:
         return
     logChan = self.bot.get_channel(int(logChanID))
     if not logChan:
         return
     # At this point - we log the message
     if filename:
         await logChan.send(log_message, file=discord.File(filename))
     else:
         # Check for suppress
         if suppress:
             log_message = Nullify.clean(log_message)
         await logChan.send(log_message)
	async def _chat(self, channel, server, message):
		# Check if we're suppressing @here and @everyone mentions

		message = DisplayName.clean_message(message, bot=self.bot, server=server)

		if self.settings.getServerStat(server, "SuppressMentions"):
			suppress = True
		else:
			suppress = False
		if message == None:
			return
		if not self.canChat(server):
			return
		await channel.trigger_typing()

		msg = self.chatBot.respond(message)

		if not msg:
			return
		# Check for suppress
		if suppress:
			msg = Nullify.clean(msg)
		await channel.send(msg)
Beispiel #23
0
    async def define(self, ctx, *, word: str = None):
        """Gives the definition of the word passed."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False

        if not word:
            msg = 'Usage: `{}define [word]`'.format(ctx.prefix)
            await ctx.channel.send(msg)
            return
        url = "http://api.urbandictionary.com/v0/define?term={}".format(
            quote(word))
        msg = 'I couldn\'t find a definition for "{}"...'.format(word)
        r = requests.get(url, headers={'User-agent': self.ua})
        theJSON = r.json()["list"]
        if len(theJSON):
            # Got it - let's build our response
            if self.random:
                ourWord = random.choice(theJSON)
            else:
                ourWord = theJSON[0]
            msg = '__**{}:**__\n\n{}'.format(string.capwords(ourWord["word"]),
                                             ourWord["definition"])
            if ourWord["example"]:
                msg = '{}\n\n__Example(s):__\n\n*{}*'.format(
                    msg, ourWord["example"])

        # await ctx.channel.send(msg)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        await Message.say(self.bot, msg, ctx.message.channel,
                          ctx.message.author)
Beispiel #24
0
    async def vks(self, ctx, *, user=None):
        """Lists the vote count of the passed user (bot-admin only) or the author if no user was passed."""
        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
        # Default to author if not admin/bot-admin
        if not isAdmin:
            user = None

        if user == None:
            user = ctx.author.mention

        check_user = DisplayName.memberForName(user, ctx.guild)
        if not check_user:
            await ctx.send("I couldn't find *{}*...".format(
                Nullify.clean(user)))
            return

        vote_list = self.settings.getServerStat(ctx.guild, "VoteKickArray")
        for member in vote_list:
            if member["ID"] == check_user.id:
                if len(member["Kicks"]) == 1:
                    await ctx.send("*{}* has 1 vote against them.".format(
                        DisplayName.name(check_user)))
                else:
                    await ctx.send("*{}* has {} votes against them.".format(
                        DisplayName.name(check_user), len(member["Kicks"])))
                return
        await ctx.send("*{}* has 0 votes against them.".format(
            DisplayName.name(check_user)))
Beispiel #25
0
    async def zalgo(self, ctx, *, message=None):
        """Ỉ s̰hͨo̹u̳lͪd͆ r͈͍e͓̬a͓͜lͨ̈l̘̇y̡͟ h͚͆a̵͢v͐͑eͦ̓ i͋̍̕n̵̰ͤs͖̟̟t͔ͤ̉ǎ͓͐ḻ̪ͨl̦͒̂ḙ͕͉d͏̖̏ ṡ̢ͬö̹͗m̬͔̌e̵̤͕ a̸̫͓͗n̹ͥ̓͋t̴͍͊̍i̝̿̾̕v̪̈̈͜i̷̞̋̄r̦̅́͡u͓̎̀̿s̖̜̉͌..."""
        if message == None:
            await ctx.send("Usage: `{}zalgo [message]`".format(ctx.prefix))
            return
        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False

        words = message.split()
        try:
            iterations = int(words[len(words) - 1])
            words = words[:-1]
        except Exception:
            iterations = 1

        if iterations > 100:
            iterations = 100
        if iterations < 1:
            iterations = 1

        zalgo = " ".join(words)
        for i in range(iterations):
            if len(zalgo) > 2000:
                break
            zalgo = self._zalgo(zalgo)

        zalgo = zalgo[:2000]

        # Check for suppress
        if suppress:
            zalgo = Nullify.clean(zalgo)
        await Message.say(self.bot, zalgo, ctx.message.channel,
                          ctx.message.author, 1, 2000, 5)
Beispiel #26
0
    async def setparts(self, ctx, *, parts: str = None):
        """Set your own parts - can be a url, formatted text, or nothing to clear. DEPRECATED - Use newhw instead."""

        channel = ctx.message.channel
        author = ctx.message.author
        server = ctx.message.guild

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild,
                                       "SuppressMentions").lower() == "yes":
            suppress = True
        else:
            suppress = False

        if not parts:
            parts = ""

        self.settings.setGlobalUserStat(author, "Parts", parts)
        msg = '*{}\'s* parts have been set to (DEPRECATED - Use {}newhw instead):\n{}'.format(
            DisplayName.name(author), ctx.prefix, parts)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        await channel.send(msg)
Beispiel #27
0
    async def randefine(self, ctx):
        """Gives a random word and its definition."""

        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        url = "http://api.urbandictionary.com/v0/random"
        title = permalink = None
        theJSON = await DL.async_json(url, headers={'User-agent': self.ua})
        theJSON = theJSON["list"]
        if len(theJSON):
            # Got it - let's build our response
            if self.random:
                ourWord = random.choice(theJSON)
            else:
                ourWord = theJSON[0]
            msg = '__**{}:**__\n\n{}'.format(string.capwords(ourWord["word"]),
                                             ourWord["definition"])
            if ourWord["example"]:
                msg = '{}\n\n__**Example(s):**__\n\n*{}*'.format(
                    msg, ourWord["example"])
            permalink = ourWord["permalink"]
            title = "Urban Dictionary Link"

        # await ctx.channel.send(msg)
        # Check for suppress
        if suppress:
            msg = Nullify.clean(msg)
        # await Message.Message(message=msg).send(ctx)
        await Message.EmbedText(title=title,
                                description=msg,
                                color=ctx.author,
                                url=permalink).send(ctx)
Beispiel #28
0
    async def getautotemp(self, ctx):
        """Gets the temp role applied to each new user that joins."""
        # Check if we're suppressing @here and @everyone mentions
        if self.settings.getServerStat(ctx.message.guild, "SuppressMentions"):
            suppress = True
        else:
            suppress = False

        isAdmin = ctx.message.author.permissions_in(
            ctx.message.channel).administrator
        # Only allow admins to change server stats
        if not isAdmin:
            await ctx.message.channel.send(
                'You do not have sufficient privileges to access this command.'
            )
            return

        temp_id = self.settings.getServerStat(ctx.guild, "TempRole")
        if temp_id == None:
            # No temp setup
            await ctx.send("There is no default temp role.")
            return

        temp_role = DisplayName.roleForName(temp_id, ctx.guild)
        if temp_role == None:
            # Not a role anymore
            await ctx.send(
                "The default temp role ({}) no longer exists.".format(temp_id))
            return
        role_time = self.settings.getServerStat(ctx.guild, "TempRoleTime")
        msg = "**{}** is the default temp role - will be active for *{}*.".format(
            temp_role.name,
            ReadableTime.getReadableTimeBetween(0, role_time * 60))
        if suppress:
            msg = Nullify.clean(msg)
        await ctx.send(msg)
Beispiel #29
0
	async def invite(self, ctx, invite_url = None):
		"""Outputs a url you can use to invite me to your server."""
		if self.settings.getGlobalStat("AllowServerJoin", True):
			return await ctx.send('Invite me to *your* server with this link: \n<{}>'.format(
				discord.utils.oauth_url(self.bot.user.id, permissions=discord.Permissions(permissions=8))
			))
		# Check if we're temporarily allowing this server
		server = ctx.guild
		if invite_url:
			try:
				invite = await self.bot.fetch_invite(invite_url)
				server = invite.guild
			except:
				pass
		if server and any(x for x in self.temp_allowed if x[0] == server.id):
			# Got an invite
			return await ctx.send('Invite me to {} with this link: \n<{}>'.format(
				Nullify.clean(server.name),
				discord.utils.oauth_url(self.bot.user.id, permissions=discord.Permissions(permissions=8),guild=server)
			))
		return await ctx.send("You need approval from my owner{} to add me.  You can request it with `{}requestjoin guild_invite_url`.".format(
			"" if len(self.settings.getOwners()) == 1 else "s",
			ctx.prefix
		))
Beispiel #30
0
		def computeAction(self, bot, ctx, target):
			'''return a message based on the context and argument of the command'''
			mesg = ""

			if not target: # no arguments
				mesg = random.choice(self.nothingList)
			else:
				targetMember = DisplayName.memberForName(target, ctx.message.guild)

				if targetMember:
					if self.botList and targetMember.id == bot.user.id: # actioning the bot
						mesg = random.choice(self.botList) # if botList is empty we fail over to the member list
					elif self.selfList and targetMember.id == ctx.message.author.id: # actioning themselves
						mesg = random.choice(self.selfList)
					else: # actioning another user
						mesg = random.choice(self.memberList).replace("{}",DisplayName.name(targetMember))
				else: # actioning an item
					mesg = random.choice(self.itemList)
					if '{}' in mesg:
						mesg = mesg.format(target)

			mesgFull = '*{}*, {}'.format(DisplayName.name(ctx.message.author), mesg)
			mesgFull = Nullify.clean(mesgFull)
			return mesgFull