207 lines
9.4 KiB
Python
207 lines
9.4 KiB
Python
# -*- 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 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()
|
|
|
|
# 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+"\"")
|
|
with codecs.open("resources/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)
|
|
|
|
# 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...")
|
|
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)
|
|
|
|
|
|
|
|
# Runs the whole shabang
|
|
client.run(token)
|