# -*- coding: utf-8 -*- import discord import asyncio import pickle import codecs import string import json import funcs # Creates swcharacters.json if it doesn't exist try: f = open("resources/swcharacters.json","r") except: funcs.logThis("swcharacters.json didn't exist. Making it now.") emptyDict = {} with open("resources/swcharacters.json","w") as f: json.dump(emptyDict,f,indent = 4) finally: f.close() # Creates trivia.json if it doesn't exist try: f = open("resources/trivia.json","r") except: funcs.logThis("trivia.json didn't exist. Making it now.") data = {"questions":{},"users":{}} with open("resources/trivia.json","w") as f: json.dump(data,f,indent = 4) finally: f.close() # Creates destinyPoints.txt if it doesn't exist try: f = open("resources/destinyPoints.txt","r") except: funcs.logThis("destinyPoints.txt didn't exist. Making it now.") with open("resources/destinyPoints.txt","w") as f: f.write("") finally: f.close() # Creates token.txt try: f = open("token.txt","r") except: funcs.logThis("token.txt didn't exist. Write your bot token in the file.") with open("resources/token.txt","w") as f: f.write("Replace this line with bot token") finally: f.close() # Gets secret bot token with open("token.txt","r") as f: token = f.read().replace("\n","") client = discord.Client() # Logs in @client.event async def on_ready(): funcs.logThis("Logged in as "+client.user.name+", "+str(client.user.id)) game = discord.Game("Some weeb shit") await client.change_presence(activity=game) # Reads messages and tests if they are Gwendolyn commands @client.event async def on_message(message): # Sends the contents of "help.txt" if message.content.lower().startswith("!help"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") if message.content.lower() == "!help" or message.content.lower() == "!help ": with codecs.open("resources/help/help.txt",encoding="utf-8") as f: text = f.read() em = discord.Embed(title = "Help", description = text,colour = 0x59f442) await message.channel.send(embed = em) else: command = message.content.lower().replace(" ","-").replace("!","") funcs.logThis("Looking for "+command+".txt") try: with codecs.open("resources/help/"+command+".txt",encoding="utf-8") as f: text = f.read() em = discord.Embed(title = command.replace("help-","").capitalize(), description = text,colour = 0x59f442) await message.channel.send(embed = em) except: await message.channel.send("Couldn't find help for that command") # Stops the bot elif message.content.lower().startswith("!stop"): if message.author.name == "Nikolaj": funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send("Logging out...") with open("resources/trivia.json","r") as f: data = json.load(f) data["questions"] = {} with open("resources/trivia.json","w") as f: json.dump(data,f,indent=4) await client.logout() else: funcs.logThis(message.author.name+" tried to run "+message.content) await message.channel.send("I don't think I will, "+message.author.name) # Does a hello with the helloFunc function from funcs/gwendolynFuncs.py elif message.content.lower().startswith("!hello"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send(funcs.helloFunc(message.author.name)) # Rolls dice with the roll_dice function from funcs/roll/dice.py elif message.content.lower().startswith("!roll"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") if message.content.lower() == "!roll" or message.content.lower() == "!roll ": await message.channel.send(funcs.roll_dice(message.author.name)) else: await message.channel.send(funcs.roll_dice(message.author.name, message.content.lower().replace("!roll",""))) # Looks up a spell with the spellFunc function from funcs/lookup/lookupFuncs.py elif message.content.lower().startswith("!spell "): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send(funcs.spellFunc(message.content)) # Looks up a monster with the monsterFuncs() from funcs/lookup/lookupFuncs.py elif message.content.lower().startswith("!monster "): funcs.logThis(message.author.name+" ran \""+message.content+"\"") title, text1, text2, text3, text4, text5 = funcs.monsterFunc(message.content) em1 = discord.Embed(title = title, description = text1, colour=0xDEADBF) # Sends the received information. Seperates into seperate messages if # there is too much text await message.channel.send(embed = em1) if text2 != "": if len(text2) < 2048: em2 = discord.Embed(title = "Special Abilities", description = text2, colour=0xDEADBF) await message.channel.send(embed = em2) else: em2 = discord.Embed(title = "Special Abilities", description = text2[:2048], colour=0xDEADBF) await message.channel.send(embed = em2) em2_2 = discord.Embed(title = "", description = text2[2048:], colour=0xDEADBF) await message.channel.send(embed = em2_2) if text3 != "": if len(text3) < 2048: em3 = discord.Embed(title = "Actions", description = text3, colour=0xDEADBF) await message.channel.send(embed = em3) else: em3 = discord.Embed(title = "Actions", description = text3[:2048], colour=0xDEADBF) await message.channel.send(embed = em3) em3_2 = discord.Embed(title = "", description = text3[2048:], colour=0xDEADBF) await message.channel.send(embed = em3_2) if text4 != "": if len(text4) < 2048: em4 = discord.Embed(title = "Reactions", description = text4, colour=0xDEADBF) await message.channel.send(embed = em4) else: em4 = discord.Embed(title = "Reactions", description = text4[:2048], colour=0xDEADBF) await message.channel.send(embed = em4) em4_2 = discord.Embed(title = "", description = text4[2048:], colour=0xDEADBF) await message.channel.send(embed = em4_2) if text5 != "": if len(text5) < 2048: em5 = discord.Embed(title = "Legendary Actions", description = text5, colour=0xDEADBF) await message.channel.send(embed = em5) else: em5 = discord.Embed(title = "Legendary Actions", description = text5[:2048], colour=0xDEADBF) await message.channel.send(embed = em5) em5_2 = discord.Embed(title = "", description = text5[2048:], colour=0xDEADBF) await message.channel.send(embed = em5_2) # Sends an image of the Senkulpa map elif message.content.lower().startswith("!map"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send("https://i.imgur.com/diMXXJs.jpg") # Finds a random image on the internet with the imageFuncs function from # funcs/gwendolynFuncs.py elif message.content.lower().startswith("!image"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send(funcs.imageFunc()) # Sends information about a random movie with the movieFunc function from # funcs/other/movie.py elif message.content.lower().startswith("!movie"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") async with message.channel.typing(): title, plot, cover, cast = funcs.movieFunc() if title == "error": await message.channel.send("An error occurred. Try again") else: embed = discord.Embed(title=title, description=plot, color=0x24ec19) embed.set_thumbnail(url=cover) embed.add_field(name="Cast", value=cast,inline = True) await message.channel.send(embed = embed) # Generates a random name with the nameGen function from funcs/other/generators.py elif message.content.lower().startswith("!name"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send(funcs.nameGen()) # Generates a random tavern name with the tavernGen function from funcs/other/generators.py elif message.content.lower().startswith("!tavern"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") await message.channel.send(funcs.tavernGen()) # Changes the "Playing this game" thing in Discord elif message.content.lower().startswith("!game "): funcs.logThis(message.author.name+" ran \""+message.content+"\"") gamePlaying = funcs.cap(message.content.lower().replace("!game ","")) game = discord.Game(gamePlaying) await client.change_presence(activity=game) # Rolls star wars dice with the parseRoll function from funcs/swfuncs/swroll.py elif message.content.lower().startswith("!swroll"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") command = funcs.cap(message.content.lower().replace("!swroll","")) newMessage = funcs.parseRoll(message.author.name,command) messageList = newMessage.split("\n") for messageItem in messageList: await message.channel.send(messageItem) # Deals with Destiny Points and stuff elif message.content.lower().startswith("!swd"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") command = message.content.lower().replace("!swd","") newMessage = funcs.parseDestiny(message.author.name,command) messageList = newMessage.split("\n") for messageItem in messageList: await message.channel.send(messageItem) # Accesses and changes character sheet data with the parseChar function # from funcs/swfuncs/swchar.py elif message.content.lower().startswith("!swchar") or message.content.lower().startswith("!sw"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") command = string.capwords(message.content.lower().replace("!swchar","").replace("!sw","").replace("+","+ ").replace("-","- ").replace(",",", ")) title, desc = funcs.parseChar(message.author.name,command) if title != "": em1 = discord.Embed(title = title, description = desc, colour=0xDEADBF) await message.channel.send(embed = em1) else: await message.channel.send(desc) elif message.content.lower().startswith("!wiki "): async with message.channel.typing(): funcs.logThis(message.author.name+" ran \""+message.content+"\"") command = string.capwords(message.content.lower().replace("!wiki ","")) title, content, thumbnail = funcs.findWikiPage(command) if title != "": funcs.logThis("Sending the embedded message") content += "\n[Læs mere](https://senkulpa.fandom.com/da/wiki/"+title.replace(" ","_")+")" embed = discord.Embed(title = title, description = content, colour=0xDEADBF) if thumbnail != "": embed.set_thumbnail(url=thumbnail) await message.channel.send(embed = embed) else: await message.channel.send(content) elif message.content.lower().startswith("!trivia"): funcs.logThis(message.author.name+" ran \""+message.content+"\"") if message.content.lower() == "!trivia" or message.content.lower() == "!trivia ": question, answers, correctAnswer = funcs.triviaStart(str(message.channel)) if answers != "": results = "**"+question+"**\n" for answer in range(len(answers)): results += chr(answer+97) + ") "+answers[answer]+"\n" await message.channel.send(results) await asyncio.sleep(60) funcs.triviaCountPoints(str(message.channel)) with open("resources/trivia.json", "r") as f: data = json.load(f) del data["questions"][str(message.channel)] with open("resources/trivia.json", "w") as f: json.dump(data,f,indent=4) funcs.logThis("Time's up for the trivia question in "+str(message.channel)) await message.channel.send("Time's up! The answer was \""+chr(correctAnswer)+") "+answers[correctAnswer-97]+"\". Anyone who answered that has gotten a point") else: await message.channel.send(question) elif message.content.lower().startswith("!trivia "): command = message.content.lower().replace("!trivia ","") await message.channel.send(funcs.triviaOtherThing(message.author.name,str(message.channel),command)) else: funcs.logThis("I didn't understand that") await message.channel.send("I didn't understand that") # Runs the whole shabang client.run(token)