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