import lxml.etree # Used by imageFunc import re # Used by roll_dice import datetime # Used by helloFunc import json # Used by spellFunc import random # Used by imageFunc import urllib # Used by imageFunc import imdb # Used by movieFunc import time # Used for logging import logging # Used for... you know... logging import wikia # Used by findWikiPage from .roll import dice logging.basicConfig(filename="gwendolyn.log", level=logging.INFO) # Capitalizes all words except some of them no_caps_list = ["of","the"] def cap(s): word_number = 0 lst = s.split() res = '' for word in lst: word_number += 1 if word not in no_caps_list or word_number == 1: word = word.capitalize() res += word+" " res = res[:-1] return res def time_in_range(start, end, x): """Return true if x is in the range [start, end]""" if start <= end: return start <= x <= end else: return start <= x or x <= end # Responds with a greeting of a time-aprpriate maner def helloFunc(author): now = datetime.datetime.now() if time_in_range(now.replace(hour=5, minute=0, second=0, microsecond=0),now.replace(hour=10, minute=0, second=0, microsecond=0), now): return("Good morning, "+str(author)) elif time_in_range(now.replace(hour=10, minute=0, second=0, microsecond=0),now.replace(hour=13, minute=0, second=0, microsecond=0), now): return("Good day, "+str(author)) elif time_in_range(now.replace(hour=13, minute=0, second=0, microsecond=0),now.replace(hour=18, minute=0, second=0, microsecond=0), now): return("Good afternoon, "+str(author)) elif time_in_range(now.replace(hour=18, minute=0, second=0, microsecond=0),now.replace(hour=22, minute=0, second=0, microsecond=0), now): return("Good evening, "+str(author)) elif time_in_range(now.replace(hour=22, minute=0, second=0, microsecond=0),now.replace(hour=23, minute=59, second=59, microsecond=0), now): return("Good night, "+str(author)) else: return("Why hello, "+str(author)) # Finds a random picture online def imageFunc(): # Picks a type of camera, which decides the naming scheme cams = ("one","two","three","four") cam = random.choice(cams) logThis("Chose cam type "+cam) if cam == "one": a = str(random.randint(0 ,9)) b = str(random.randint(0,9)) c = str(random.randint(0,9)) d = str(random.randint(0,9)) search = ("img_"+a+b+c+d) elif cam == "two": a = str(random.randint(2012,2016)) b = str(random.randint(1,12)).zfill(2) c = str(random.randint(1,29)).zfill(2) search = ("IMG_"+a+b+c) elif cam == "three": a = str(random.randint(1,500)).zfill(4) search = ("IMAG_"+a) elif cam == "four": a = str(random.randint(0,9)) b = str(random.randint(0,9)) c = str(random.randint(0,9)) d = str(random.randint(0,9)) search = ("DSC_"+a+b+c+d) logThis("Searching for "+search) # Searches for the image and reads the resulting web page page = urllib.request.urlopen("https://www.bing.com/images/search?q="+search+"&safesearch=off") read = page.read() tree = lxml.etree.HTML(read) images = tree.xpath('//a[@class = "thumb"]/@href') # Picks an image number = random.randint(1,len(images))-1 image = images[number] logThis("Picked image number "+str(number)) # Returns the image logThis("Successfully returned an image") return(image) def logThis(message : str): localtime = time.asctime(time.localtime(time.time())) print(localtime+" - "+message) logging.info(localtime+" - "+message) # Finds a page from the Senkulpa Wikia def findWikiPage(search : str): logThis("Trying to find wiki page for "+search) wikia.set_lang("da") searchResults = wikia.search("senkulpa",search) if len(searchResults) > 0: try: searchResult = searchResults[0].replace(",","%2C") logThis("Found it") page = wikia.page("senkulpa",searchResult) content = page.content.replace(u'\xa0', u' ').split("\n")[0] images = page.images if len(images) > 0: image = images[len(images)-1]+"/revision/latest?path-prefix=da" return page.title, content, image else: return page.title, content, "" except: logThis("Fucked up") return "", "Sorry. Fucked that one up", "" else: logThis("Couldn't find the page") return "", "Couldn't find page", "" def makeFiles(): # Creates swcharacters.json if it doesn't exist try: f = open("resources/swcharacters.json","r") except: 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: 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: 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 if it doesn't exist try: f = open("token.txt","r") except: 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()