async def drawCard(self, ctx): """Draws a Tarot Card.""" ctx = util.execute(self, ctx) try: deck = util.load_js( os.path.join("assets", "tarot", self.server_decks[ctx.message.server.id]["deck"])) except KeyError: deck = util.load_js( os.path.join("assets", "tarot", "rider-waite.json")) explanations = util.load_js( os.path.join("assets", "tarot", "descriptions.json")) if random.randint(0, 1): card = random.choice(MAJOR_ARCANA) else: card = random.choice( MAJOR_ARCANA) # TODO: set this to be of the minor arcana cardName = card.replace("-", " ") e = discord.Embed() e.title = "You drew the {} card.".format(cardName) e.set_image(url=deck[card]) if ( (ctx.message.server.id in self.server_decks) and (self.server_decks[ctx.message.server.id]["explanations-enabled"]) ) or \ (ctx.message.server.id not in self.server_decks): e.description = explanations[card] e.set_footer(text=explanations["source"]) await self.bot.say(embed=e)
def __init__(self, bot): self.whitelist = util.load_js("whitelist.json") self.blacklistList = util.load_js("blacklist.json") if "roles" not in self.whitelist: self.whitelist["roles"] = [] if "users" not in self.whitelist: self.whitelist["users"] = [] print("Whitelist: {}".format(self.whitelist)) super().__init__(bot)
async def allNote(self, ctx): perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return serverNoteList = util.load_js( os.path.join("notes", "{}.json".format(ctx.message.server.id))) noteStr = "" for item in serverNoteList: for i in range(0, serverNoteList[item]["noteNum"]): noteStr += "Note: " + serverNoteList[item]["note"][str( i + 1)] + "\n" noteStr += "Time: " + serverNoteList[item]["time"][str( i + 1)] + "\n" noteStr += "Issuer: " + serverNoteList[item]["issuer"][str( i + 1)] + "\n" noteStr += "Name: " + serverNoteList[item]["name"][str( i + 1)] + "\n" noteStr += "Issuer Name: " + serverNoteList[item][ "issuerName"][str(i + 1)] + "\n" noteStr += "\n" noteStr += "\n" e = discord.Embed(title="Note List", description=noteStr) await self.bot.say(embed=e)
async def disableCommand(self, ctx, passedCommand: str): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return disabledCommands = util.load_js("disabled-commands.json") if len(disabledCommands) == 0: disabledCommands = [] if passedCommand == "disableCommand" or passedCommand == "enableCommand": await self.bot.say("That command cannot be disabled.") return for command in self.bot.commands: if command == passedCommand: disabledCommands.append({ "command": passedCommand, "server-id": ctx.message.server.id }) util.save_js("disabled-commands.json", disabledCommands) await self.bot.say("{}{} has been disabled.".format( self.bot.command_prefix, passedCommand)) return await self.bot.say("The {}{} command does not exist!".format( self.bot.command_prefix, passedCommand))
async def slap(self, ctx, *, target: str = ""): await self.bot.send_typing(ctx.message.channel) """Slap ya friends""" titles = ["oof", "ouch", "owie", "hngh", "ouchie ouch", "ow"] pics = util.load_js(os.path.join("assets", "slap.json")) memberID = target.replace("<", "").replace(">", "").replace("@", "").replace("!", "") member = ctx.message.server.get_member(memberID) if member != None: target = member.name if ctx.message.author.id == memberID: d = "{} slapped themselves.".format(target) elif self.bot.user.id == memberID: d = "{} slapped me! ;-;".format(ctx.message.author.name) elif member == None and target == "": d = "slappity slappity" else: d = "{} got slapped by {}.".format(target, ctx.message.author.name) e = discord.Embed(title=random.choice(titles), description=d) e.set_image(url=random.choice(pics)) await self.bot.say(embed=e)
async def punch(self, ctx, *, user: str = ""): await self.bot.send_typing(ctx.message.channel) user = user.replace("<", "").replace(">", "").replace("!", "").replace("@", "") member = ctx.message.server.get_member(user) if member != None: user = member.name images = util.load_js(os.path.join("assets", "punch.json")) imgDict = random.choice(images) e = discord.Embed() if member != None: if member.id == ctx.message.author.id: e.title = "Ya done punched urself" e.description = "{} punched themselves!".format( ctx.message.author.name) elif self.bot.user.id == member.id: e.title = "aw :(" e.description = "{} punched me.".format( ctx.message.author.name) else: e.title = imgDict["title"] e.description = imgDict["description"].format( user, ctx.message.author.name) e.set_image(url=imgDict["image-url"]) await self.bot.say(embed=e)
async def listNote(self, ctx, member : discord.Member, *, note : str = None): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return serverNoteList = util.load_js(os.path.join("notes", "{}.json".format(ctx.message.server.id))) if note==None: output="`" if member.id not in serverNoteList or serverNoteList[member.id]["noteNum"]==0: await self.bot.say("That user doesn't have any notes.") return noteNum=str(serverNoteList[member.id]["noteNum"]) for i in range(1,int(noteNum)+1): output+=str(serverNoteList[member.id]["name"][str(i)]+" {} ".format(member.id)+str(serverNoteList[member.id]["time"][str(i)])+" "+str(serverNoteList[member.id]["issuerName"][str(i)])+" "+str(serverNoteList[member.id]["issuer"][str(i)])+" "+str(serverNoteList[member.id]["note"][str(i)]))+"\n" output=output[:-1] output+="`" await self.bot.say(output) return if member.id not in serverNoteList or serverNoteList[member.id]["noteNum"]==0: await self.bot.say("That user doesn't have any notes.") return try: loggedNote = serverNoteList[member.id]["note"][note] loggedName = serverNoteList[member.id]["name"][note] loggedTime = serverNoteList[member.id]["time"][note] loggedIssuer = serverNoteList[member.id]["issuer"][note] loggedIssuerName=serverNoteList[member.id]["issuerName"][note] await self.bot.say(loggedIssuerName+""" made a note about """+loggedName+""" on """+loggedTime+""" that said `"""+loggedNote+"""`""") except KeyError: await self.bot.say("That note does not exist")
def __init__(self, bot): conf = util.load_js("config.json") self.okbLocation = conf["okaybot-location"] self.okbToken = conf["okaybot-token"] self.mod_roles = conf["moderator-roles"] self.kSpam = False super().__init__(bot)
async def addHug(self, ctx, *, url: str = ""): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return pics = util.load_js(os.path.join("assets", "hug.json")) if url == "": await self.bot.say("Please provide a url.") elif not url.startswith("http"): await self.bot.say("Please provide a valid url.") elif url.startswith("https://i.imgur.com/"): pics.append(url) util.save_js("assets/hug.json", pics) await self.bot.say("Successfully added " + link + " to hugs.json") else: try: payload = {"image": url, "type": "URL"} headers = {"Authorization": "Client-ID 2397de93cc488b8"} r = requests.post("https://api.imgur.com/3/image", headers=headers, data=payload) link = r.json()["data"]["link"] pics.append(link) util.save_js("assets/hug.json", pics) await self.bot.say("Successfully added " + link + " to hugs.json") except: await self.bot.say("nope")
async def warn(self, ctx, member: discord.Member): perms = await util.check_perms(self, ctx) if not perms: return serverWarnList = util.load_js( os.path.join("warns", "{}.json".format(ctx.message.server.id))) if member.id not in serverWarnList: serverWarnList[member.id] = 0 serverWarnList[member.id] += 1 if self.MAXWARNS - serverWarnList[member.id] > 1: await self.bot.say( "<@!{}>, you have been given a warning. You have {} warnings left." .format(member.id, self.MAXWARNS - serverWarnList[member.id])) elif serverWarnList[member.id] >= self.MAXWARNS: pass else: await self.bot.say( "<@!{}>, this is your final warning. One more warn and you will be banned." .format(member.id)) util.save_js( os.path.join("warns", "{}.json".format(ctx.message.server.id)), serverWarnList) if serverWarnList[member.id] >= self.MAXWARNS: await self.bot.ban(member) await self.bot.say( "<@!{}> has been banned from the server for getting {} warnings." .format(member.id, self.MAXWARNS))
async def ship(self, mem1: str, mem2: str): """Ship two people together to create a fanfiction. Slightly disturbing material may arise out of this. You have been warned.""" fanfics = util.load_js("cogs/fanfics.json") message = fanfics[random.randint(0, len(fanfics) - 1)] msgFormatted = message.format(mem1, mem2) print(msgFormatted) await self.bot.say(msgFormatted)
async def inviteLink(self, ctx): """Invite the bot to your own server! Sends you a DM with the invite link.""" perms = await util.check_perms(self, ctx) if not perms: return client_id = util.load_js("config.json")["client-id"] await self.bot.whisper( "https://discordapp.com/oauth2/authorize?&client_id={0}&scope=bot&permissions=0" .format(client_id))
async def backupNote(self, ctx): perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return serverNoteList = util.load_js( os.path.join("notes", "{}.json".format(ctx.message.server.id))) await self.bot.say(serverNoteList)
async def hug(self, ctx, *, target: str = ""): # async def hug(self, ctx, *, hugNum : int = -1, target : str = ""): await self.bot.send_typing(ctx.message.channel) """Hug ya friends""" ctx = util.execute(self, ctx) titles = ["hugs", "aww", "yay", "huggie hug"] pics = util.load_js(os.path.join("assets", "hug.json")) memberID = target.replace("<", "").replace(">", "").replace("@", "").replace("!", "") member = ctx.message.server.get_member(memberID) if member != None: target = member.name if self.bot.user.id == ctx.message.author.id: d = "I hugged myself!" elif ctx.message.author.id == memberID: d = "{} hugged themselves.".format(target) elif self.bot.user.id == memberID: d = "{} hugged me!".format(ctx.message.author.name) elif member == None and target == "": d = "hugs" else: d = "{} got hugged by {}.".format(target, ctx.message.author.name) i = random.randint(0, len(pics) - 1) urlText = pics[i] titleText = random.choice(titles) if urlText == "https://i.imgur.com/oQ8J3Za.gif": titleText = "oops" if self.bot.user.id == ctx.message.author.id: d = "I got pizza!" elif ctx.message.author.id == memberID: d = "{} got pizza.".format(target) elif self.bot.user.id == memberID: d = "{} gave me pizza!".format(ctx.message.author.name) elif member == None and target == "": d = "pizza" else: d = "{} gave {} pizza.".format(ctx.message.author.name, target) if urlText == "https://i.imgur.com/MnszwT3.gif": titleText = "no" if self.bot.user.id == ctx.message.author.id: d = "I didn't want to hug myself" elif ctx.message.author.id == memberID: d = "{} didn't want the hug.".format(target) elif self.bot.user.id == memberID: d = "{} didn't want my hugs! ;-;".format( ctx.message.author.name) elif member == None and target == "": d = "no" else: d = "{} didn't want {}'s hug.".format(target, ctx.message.author.name) e = discord.Embed(title=titleText, description=d) e.set_image(url=urlText) await self.bot.say(embed=e)
async def hashNote(self,ctx): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return serverNoteList = util.load_js(os.path.join("notes", "{}.json".format(ctx.message.server.id))) hashed=hashlib.sha256(str(serverNoteList).encode("utf-8")).hexdigest() await self.bot.say(hashed)
async def disableLogging(self, ctx): perms = await util.check_perms(self, ctx) if not perms: return logLog = util.load_js("logs/server-list.json") logLog.remove(ctx.message.server.id) util.save_js("logs/server-list.json", logLog) await self.bot.say("Logging for this server has been disabled.")
async def deleteNote(self, ctx, member: discord.Member, *, note: str = None): perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return await self.bot.delete_message(ctx.message) if note == None: await self.bot.say("Please provide a note number.") return serverNoteList = util.load_js( os.path.join("notes", "{}.json".format(ctx.message.server.id))) if member.id not in serverNoteList or serverNoteList[ member.id]["noteNum"] == 0: await self.bot.say("That user doesn't have any notes.") return noteNum = str(serverNoteList[member.id]["noteNum"]) if note > noteNum: await self.bot.say("That user doesn't have that many notes.") return if serverNoteList[member.id]["noteNum"] <= 1: serverNoteList.pop(member.id, None) for i in range(int(note), serverNoteList[member.id]["noteNum"]): for key, item in serverNoteList[member.id].items(): if key == "noteNum": continue if serverNoteList[member.id]["noteNum"] == 1: serverNoteList[member.id][key].pop(str(i), None) else: serverNoteList[member.id][key][str(i)] = serverNoteList[ member.id][key][str(i + 1)] """ try: serverNoteList[member.id]["note"][str(i)]=serverNoteList[member.id]["note"][str(i+1)] serverNoteList[member.id]["name"][str(i)]=serverNoteList[member.id]["name"][str(i+1)] serverNoteList[member.id]["time"][str(i)]=serverNoteList[member.id]["time"][str(i+1)] serverNoteList[member.id]["issuer"][str(i)]=serverNoteList[member.id]["issuer"][str(i+1)] serverNoteList[member.id]["issuerName"][str(i)]=serverNoteList[member.id]["issuerName"][str(i+1)] except KeyError: serverNoteList[member.id]["noteNum"]-=1 util.save_js(os.path.join("notes", "{}.json".format(ctx.message.server.id)), serverNoteList) return """ util.save_js( os.path.join("notes", "{}.json".format(ctx.message.server.id)), serverNoteList)
async def listWarns(self, ctx, member : discord.Member): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return serverWarnList = util.load_js(os.path.join("warns", "{}.json".format(ctx.message.server.id))) if member.id not in serverWarnList or serverWarnList[member.id]==0: await self.bot.say("<@!{}> does not currently have any warns.".format(member.id)) elif serverWarnList[member.id]>=self.MAXWARNS: await self.bot.say("<@!{}> recieved ".format(member.id)+str(self.MAXWARNS)+" warnings and was banned.") else: await self.bot.say("<@!{}> currently has ".format(member.id)+str(serverWarnList[member.id])+" warnings. They will be banned if they recieve "+str(self.MAXWARNS-serverWarnList[member.id])+" more.")
async def enableLogging(self, ctx): perms = await util.check_perms(self, ctx) if not perms: return logLog = util.load_js("logs/server-list.json") if len(logLog) == 0: logLog = [] logLog.append(ctx.message.server.id) util.save_js("logs/server-list.json", logLog) await self.bot.say("Logging for this server has been enabled.")
async def backupNote(self, ctx, *, text : str = None): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return if text == None: await self.bot.upload(os.path.join("notes", "{}.json".format(ctx.message.server.id))) else: serverNoteList = util.load_js(os.path.join("notes", "{}.json".format(ctx.message.server.id))) noteListRaw=[serverNoteList[i:i+1750] for i in range(0, len(serverNoteList), 1750)] for i in range(len(noteListRaw)): await self.bot.say(noteListRaw[i])
async def fDisable(self, ctx): "Don't want SpongeBob's ugly mug staring you down every time you pay your respects? Use this. Requires special perms." perms = await util.check_perms(self, ctx) if not perms: return conf = util.load_js("config.json") try: conf["fDisabled"].append(ctx.message.server.id) except KeyError: conf["fDisabled"] = [] conf["fDisabled"].append(ctx.message.server.id) util.save_js("config.json", conf) await self.bot.say("F Reactions have been disabled.")
async def beanRegister(self, ctx): util.nullifyExecute() if os.path.isfile(os.path.join("assets", "bean.json")): beanlist = util.load_js(os.path.join("assets", "bean.json")) else: beanlist = [] for user in beanlist: if str(ctx.message.author.id) == str(user["id"]): await self.bot.say("{} is already in the beanlist.".format( ctx.message.author.name)) return beanlist.append({"id": ctx.message.author.id}) util.save_js("assets/bean.json", beanlist) await self.bot.say( "**{}**, you have been added to the beanlist.".format( ctx.message.author.mention))
async def printDisabledCommands(self, ctx): disabledCommands = util.load_js("disabled-commands.json") e = discord.Embed() eContent = "" for d in disabledCommands: if d["server-id"] == ctx.message.server.id: eContent += d["command"] eContent += "\n" if eContent == "": e.title = "No commands have been disabled for this server." else: e.title = "Here are the commands that have been disabled for this server." e.description = eContent await self.bot.say(embed=e)
async def noOneCaresDisable(self, ctx): """Getting annoyed? No one cares, but are you?""" perms = util.check_perms(self, ctx) if not perms: return conf = util.load_js("config.json") try: conf["noOneCaresDisabled"].append(ctx.message.server.id) except KeyError: conf["noOneCaresDisabled"] = [] conf["noOneCaresDisabled"].append(ctx.message.server.id) util.save_js("config.json", conf) await self.bot.say( "The 'no one cares' reaction has been disabled for this server.")
async def unwarn(self, ctx, member : discord.Member, amount : int = 1): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return serverWarnList = util.load_js(os.path.join("warns", "{}.json".format(ctx.message.server.id))) if member.id not in serverWarnList or serverWarnList[member.id] <= 0: await self.bot.say("{} does not currently have any warns".format(member.name)) return if amount > self.MAXWARNS: amount = self.MAXWARNS serverWarnList[member.id] -= amount await self.bot.say("<@!{}>, you have had {} warns removed. {} warnings remain.".format(member.id, amount, self.MAXWARNS - serverWarnList[member.id])) util.save_js(os.path.join("warns", "{}.json".format(ctx.message.server.id)), serverWarnList)
async def bean(self, ctx, *, user: str = ""): await self.bot.send_typing(ctx.message.channel) ctx = util.execute(self, ctx) whitelist = [] beans = False imageUrl = "https://i.imgur.com/sncYgfx.png" memberID = user.replace("<", "").replace(">", "").replace("@", "").replace("!", "") member = ctx.message.server.get_member(memberID) if os.path.isfile(os.path.join("assets", "bean.json")): beanlist = util.load_js(os.path.join("assets", "bean.json")) beans = True else: beans = False if member: if beans: for userList in beanlist: if str(memberID) == str(userList["id"]): imageUrl = "https://i.imgur.com/oBadUcY.gif" user = member.name if self.bot.user.id == ctx.message.author.id: title = "I beaned myself" description = "Why did I do that?" elif member is ctx.message.author: title = "Ya done beaned urself" description = "{} beaned themselves!".format( ctx.message.author.name) elif self.bot.user.id == memberID: title = "aw :(" description = "{} beaned me.".format(ctx.message.author.name) else: title = "Uh oh!" description = "{} got beaned by {}!".format( user, ctx.message.author.name) else: title = "Uh oh!" description = "{} got beaned by {}!".format( user, ctx.message.author.name) embed = discord.Embed() embed.title = title embed.description = description embed.set_image(url=imageUrl) await self.bot.say(embed=embed)
async def beanUnregister(self, ctx): util.nullifyExecute() if os.path.isfile(os.path.join("assets", "bean.json")): beanlist = util.load_js(os.path.join("assets", "bean.json")) else: await self.bot.say("**{}**, you aren't on the beanlist.".format( ctx.message.author.mention)) return for user in beanlist: if str(ctx.message.author.id) == str(user["id"]): beanlist.remove(user) util.save_js("assets/bean.json", beanlist) await self.bot.say( "**{}**, you have been removed from beanlist.".format( ctx.message.author.mention)) return await self.bot.say("{}, you aren't on the beanlist.".format( ctx.message.author.name))
async def fEnable(self, ctx): "Enables the bot to react accordingly whenever you pay your respects. Requires special perms." perms = await util.check_perms(self, ctx) if not perms: return conf = util.load_js("config.json") try: conf["fDisabled"].remove(ctx.message.server.id) except KeyError: await self.bot.say("F Reactions are already enabled.") return except ValueError: await self.bot.say("F Reactions are already enabled.") return util.save_js("config.json", conf) await self.bot.say("F Reactions have been enabled.")
async def note(self, ctx, member: discord.Member, *, note: str = None): perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return await self.bot.delete_message(ctx.message) if note == None: await self.bot.say("You didn't make a note.") return serverNoteList = util.load_js( os.path.join("notes", "{}.json".format(ctx.message.server.id))) if member.id not in serverNoteList: serverNoteList[member.id] = { 'noteNum': 0, 'name': { '1': '' }, 'note': { '1': '' }, 'time': { '1': '' }, 'issuer': { '1': '' }, 'issuerName': { '1': '' } } serverNoteList[member.id]["noteNum"] += 1 noteNum = str(serverNoteList[member.id]["noteNum"]) serverNoteList[member.id]["note"][noteNum] = note serverNoteList[member.id]["name"][noteNum] = member.name serverNoteList[member.id]["time"][noteNum] = str(datetime.now()) serverNoteList[member.id]["issuer"][noteNum] = ctx.message.author.id serverNoteList[ member.id]["issuerName"][noteNum] = ctx.message.author.name util.save_js( os.path.join("notes", "{}.json".format(ctx.message.server.id)), serverNoteList) await self.bot.say("Your note has been recorded")
async def wipeNote(self, ctx, *, confirm : str = None): util.nullifyExecute() perms = await util.check_perms(self, ctx) if not perms: return if ctx.message.author.id == self.bot.user.id: return serverNoteList = util.load_js(os.path.join("notes", "{}.json".format(ctx.message.server.id))) key=hashlib.sha256(str(serverNoteList).encode("utf-8")).hexdigest() if confirm==key: await self.bot.say("Emergency note backup.") await self.bot.upload(os.path.join("notes", "{}.json".format(ctx.message.server.id))) serverNoteList={} util.save_js(os.path.join("notes", "{}.json".format(ctx.message.server.id)), serverNoteList) await self.bot.say("All notes have been wiped.") return else: await self.bot.say("To wipe the notes, you must enter the correct key.") return