Initial file uploads
This commit is contained in:
parent
72230fe676
commit
b611a6bbbd
6 changed files with 844 additions and 0 deletions
26
generate.py
Normal file
26
generate.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
from poe_api_wrapper import PoeApi
|
||||||
|
import os
|
||||||
|
client = PoeApi(os.environ['pb'])
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
#from revChatGPT.V1 import AsyncChatbot
|
||||||
|
#chatbot = AsyncChatbot(config={
|
||||||
|
# "email": os.environ['email'],
|
||||||
|
# "password": os.environ['pass']
|
||||||
|
#})
|
||||||
|
|
||||||
|
|
||||||
|
#Auth
|
||||||
|
async def GetText(prompt,bot = "chinchilla"):
|
||||||
|
prev_text = ""
|
||||||
|
#code = ""
|
||||||
|
for chunk in client.send_message(bot, prompt, suggest_replies=True):
|
||||||
|
await asyncio.sleep(0.05)
|
||||||
|
prev_text = chunk["text"]
|
||||||
|
client.delete_chat(bot, del_all=True)
|
||||||
|
#client.chat_break(bot, chatCode = code)
|
||||||
|
#async for data in chatbot.ask(prompt):
|
||||||
|
# message = data["message"][len(prev_text) :]
|
||||||
|
# #print(message, end="", flush=True)
|
||||||
|
# prev_text = data["message"]
|
||||||
|
return prev_text
|
509
itemname.py
Normal file
509
itemname.py
Normal file
|
@ -0,0 +1,509 @@
|
||||||
|
import random
|
||||||
|
|
||||||
|
bases = """sword
|
||||||
|
axe
|
||||||
|
hammer
|
||||||
|
amulet
|
||||||
|
potion
|
||||||
|
broom
|
||||||
|
orb
|
||||||
|
cloak
|
||||||
|
armor
|
||||||
|
circlet
|
||||||
|
boots
|
||||||
|
bag
|
||||||
|
shield
|
||||||
|
shackles
|
||||||
|
glasses
|
||||||
|
helmet
|
||||||
|
book
|
||||||
|
bow
|
||||||
|
ring
|
||||||
|
socks
|
||||||
|
ointment
|
||||||
|
deck
|
||||||
|
fork
|
||||||
|
cart
|
||||||
|
boat
|
||||||
|
paper
|
||||||
|
arrows
|
||||||
|
apparatus
|
||||||
|
slippers
|
||||||
|
greaves
|
||||||
|
staff
|
||||||
|
skull
|
||||||
|
head
|
||||||
|
hand
|
||||||
|
glue
|
||||||
|
quiver
|
||||||
|
token
|
||||||
|
instrument
|
||||||
|
mirror
|
||||||
|
flask
|
||||||
|
keg
|
||||||
|
javelin
|
||||||
|
dagger
|
||||||
|
maul
|
||||||
|
shuriken
|
||||||
|
spiked chain
|
||||||
|
dust
|
||||||
|
gem
|
||||||
|
gate
|
||||||
|
carpet
|
||||||
|
candle
|
||||||
|
crystal ball
|
||||||
|
fortress
|
||||||
|
figurine
|
||||||
|
hat
|
||||||
|
portable ram
|
||||||
|
trap
|
||||||
|
box
|
||||||
|
ioun stone
|
||||||
|
horn
|
||||||
|
trinket
|
||||||
|
machine"""
|
||||||
|
|
||||||
|
locations = """
|
||||||
|
fantasy village
|
||||||
|
magic forest
|
||||||
|
dragon's lair
|
||||||
|
enchanted castle
|
||||||
|
elven city
|
||||||
|
dwarven mine
|
||||||
|
wizard's tower
|
||||||
|
haunted graveyard
|
||||||
|
orc stronghold
|
||||||
|
goblin cave
|
||||||
|
dark swamp
|
||||||
|
knight's training ground
|
||||||
|
sorcerer's academy
|
||||||
|
thieves' guild hideout
|
||||||
|
mermaid's cove
|
||||||
|
troll bridge
|
||||||
|
fairy glen
|
||||||
|
undead crypt
|
||||||
|
wizard's library
|
||||||
|
druidic grove
|
||||||
|
witch's hut
|
||||||
|
treasure-filled dungeon
|
||||||
|
mystical ruins
|
||||||
|
celestial observatory
|
||||||
|
elemental plane
|
||||||
|
astral realm
|
||||||
|
planar crossroads
|
||||||
|
forgotten temple
|
||||||
|
abyssal rift
|
||||||
|
angelic citadel
|
||||||
|
shadowy underworld
|
||||||
|
lycanthrope den
|
||||||
|
necromancer's sanctum
|
||||||
|
clockwork workshop
|
||||||
|
warlock's pact realm
|
||||||
|
underground city
|
||||||
|
beastman encampment
|
||||||
|
mysterious island
|
||||||
|
underwater cavern
|
||||||
|
timeless pocket dimension
|
||||||
|
arcane battleground
|
||||||
|
demon-infested wasteland
|
||||||
|
divine garden
|
||||||
|
floating fortress
|
||||||
|
jungle temple
|
||||||
|
mad alchemist's laboratory
|
||||||
|
phoenix nest
|
||||||
|
twisted labyrinth
|
||||||
|
ghost ship
|
||||||
|
oracle's sanctuary
|
||||||
|
giant's stronghold
|
||||||
|
golem foundry
|
||||||
|
dreamwalker's realm
|
||||||
|
vampire's castle
|
||||||
|
plague-ridden village
|
||||||
|
wandering nomad camp
|
||||||
|
entangled thicket
|
||||||
|
celestial court
|
||||||
|
abandoned celestial city
|
||||||
|
forgotten astral prison"""
|
||||||
|
|
||||||
|
creatures = """
|
||||||
|
dragon
|
||||||
|
goblin
|
||||||
|
orc
|
||||||
|
elf
|
||||||
|
dwarf
|
||||||
|
troll
|
||||||
|
gnome
|
||||||
|
kobold
|
||||||
|
centaur
|
||||||
|
minotaur
|
||||||
|
harpy
|
||||||
|
siren
|
||||||
|
merfolk
|
||||||
|
sphinx
|
||||||
|
unicorn
|
||||||
|
phoenix
|
||||||
|
werewolf
|
||||||
|
vampire
|
||||||
|
zombie
|
||||||
|
skeleton
|
||||||
|
ghost
|
||||||
|
demon
|
||||||
|
angel
|
||||||
|
fairy
|
||||||
|
giant
|
||||||
|
ogre
|
||||||
|
cyclops
|
||||||
|
hydra
|
||||||
|
chimera
|
||||||
|
griffin
|
||||||
|
wyvern
|
||||||
|
elemental
|
||||||
|
golem
|
||||||
|
gargoyle
|
||||||
|
lich
|
||||||
|
beholder
|
||||||
|
mind flayer
|
||||||
|
nymph
|
||||||
|
satyr
|
||||||
|
kraken
|
||||||
|
manticore
|
||||||
|
djinn
|
||||||
|
mummy
|
||||||
|
wraith
|
||||||
|
gorgon
|
||||||
|
kraken
|
||||||
|
pegasus
|
||||||
|
treant
|
||||||
|
lamia
|
||||||
|
basilisk
|
||||||
|
rakshasa
|
||||||
|
salamander
|
||||||
|
changeling
|
||||||
|
hobgoblin
|
||||||
|
tengu
|
||||||
|
mimic
|
||||||
|
rust monster
|
||||||
|
blink dog
|
||||||
|
displacer beast"""
|
||||||
|
|
||||||
|
spells = """
|
||||||
|
enchantment
|
||||||
|
evocation
|
||||||
|
illusion
|
||||||
|
conjuration
|
||||||
|
abjuration
|
||||||
|
transmutation
|
||||||
|
necromancy
|
||||||
|
divination
|
||||||
|
charm
|
||||||
|
hex
|
||||||
|
curse
|
||||||
|
blessing
|
||||||
|
summoning
|
||||||
|
compulsion
|
||||||
|
protection
|
||||||
|
fire
|
||||||
|
ice
|
||||||
|
lightning
|
||||||
|
earth
|
||||||
|
wind
|
||||||
|
water
|
||||||
|
shadow
|
||||||
|
light
|
||||||
|
healing
|
||||||
|
banishment
|
||||||
|
augmentation
|
||||||
|
teleportation
|
||||||
|
mind control
|
||||||
|
time manipulation
|
||||||
|
creation
|
||||||
|
destruction
|
||||||
|
hexbreaking
|
||||||
|
illusion
|
||||||
|
shape-shifting
|
||||||
|
warding
|
||||||
|
fortune-telling
|
||||||
|
invisibility
|
||||||
|
mind reading
|
||||||
|
telekinesis
|
||||||
|
fear
|
||||||
|
love
|
||||||
|
truth
|
||||||
|
memory manipulation
|
||||||
|
elemental manipulation
|
||||||
|
fate weaving
|
||||||
|
spiritual communion
|
||||||
|
phasing
|
||||||
|
soulbinding
|
||||||
|
telepathy
|
||||||
|
dreamwalking
|
||||||
|
alchemy
|
||||||
|
curses
|
||||||
|
blessings
|
||||||
|
illusion
|
||||||
|
prophecy
|
||||||
|
necromancy
|
||||||
|
weather manipulation
|
||||||
|
energy drain
|
||||||
|
astral projection
|
||||||
|
illusion
|
||||||
|
healing
|
||||||
|
enhancement
|
||||||
|
demonology
|
||||||
|
angelic intervention
|
||||||
|
teleportation
|
||||||
|
creation
|
||||||
|
hexbreaking
|
||||||
|
warding
|
||||||
|
fey magic
|
||||||
|
geomancy
|
||||||
|
songweaving
|
||||||
|
runecasting
|
||||||
|
starcalling
|
||||||
|
chronomancy
|
||||||
|
geomancy
|
||||||
|
psionics
|
||||||
|
planar manipulation
|
||||||
|
mind melding
|
||||||
|
polymorphing
|
||||||
|
molecular disruption
|
||||||
|
pyromancy
|
||||||
|
aquamancy
|
||||||
|
aeromancy
|
||||||
|
terramancy
|
||||||
|
cryomancy
|
||||||
|
celestial magic
|
||||||
|
transfiguration
|
||||||
|
curse-breaking
|
||||||
|
illusion
|
||||||
|
portal manipulation
|
||||||
|
spirit calling
|
||||||
|
divine intervention
|
||||||
|
time dilation
|
||||||
|
cosmic manipulation
|
||||||
|
cataclysmic spells
|
||||||
|
reanimation
|
||||||
|
perception alteration
|
||||||
|
dimensional manipulation
|
||||||
|
soul manipulation"""
|
||||||
|
|
||||||
|
|
||||||
|
enchantments = """flaming
|
||||||
|
frost
|
||||||
|
healing
|
||||||
|
adamantine
|
||||||
|
death
|
||||||
|
commanding elementals
|
||||||
|
flying
|
||||||
|
talking
|
||||||
|
awakened
|
||||||
|
teleportation
|
||||||
|
unlocking
|
||||||
|
lucky
|
||||||
|
unlucky
|
||||||
|
instant
|
||||||
|
illusion
|
||||||
|
illusionary
|
||||||
|
many things
|
||||||
|
dwarven
|
||||||
|
draconic
|
||||||
|
disguise
|
||||||
|
feindish
|
||||||
|
knowledge
|
||||||
|
toughness
|
||||||
|
serpentine
|
||||||
|
folding
|
||||||
|
theives
|
||||||
|
holding
|
||||||
|
devouring
|
||||||
|
alien
|
||||||
|
eldritch
|
||||||
|
fireball
|
||||||
|
archmage
|
||||||
|
cubic
|
||||||
|
crab
|
||||||
|
stars
|
||||||
|
wild
|
||||||
|
natural
|
||||||
|
lycanthrope (wolf)
|
||||||
|
ursanthrope (bear)
|
||||||
|
felinethrope (tiger)
|
||||||
|
smashing
|
||||||
|
horripilating
|
||||||
|
revivification
|
||||||
|
holy
|
||||||
|
unholy
|
||||||
|
gravity
|
||||||
|
paper
|
||||||
|
mechanical
|
||||||
|
electricity
|
||||||
|
sonic
|
||||||
|
endless water
|
||||||
|
cursed (make something up)
|
||||||
|
jousting
|
||||||
|
charming
|
||||||
|
swarming
|
||||||
|
swarming insects
|
||||||
|
snake
|
||||||
|
fuzzy
|
||||||
|
soft
|
||||||
|
lifestealing
|
||||||
|
vorpal
|
||||||
|
the sphere
|
||||||
|
ultimate evil
|
||||||
|
pure good
|
||||||
|
true neutral
|
||||||
|
tentacle
|
||||||
|
enemy detection
|
||||||
|
secret
|
||||||
|
wonder
|
||||||
|
vecna
|
||||||
|
fish command
|
||||||
|
sticky
|
||||||
|
creative
|
||||||
|
rulership
|
||||||
|
eyes
|
||||||
|
fire resistance
|
||||||
|
telekinesis
|
||||||
|
wishes
|
||||||
|
x-ray vision
|
||||||
|
animal influence
|
||||||
|
limitless
|
||||||
|
wild magic
|
||||||
|
the sewers
|
||||||
|
todd
|
||||||
|
love
|
||||||
|
life trapping
|
||||||
|
soul trapping
|
||||||
|
tripping
|
||||||
|
psychadelic
|
||||||
|
berserker
|
||||||
|
dry
|
||||||
|
elvenkind
|
||||||
|
displacement
|
||||||
|
winterlands
|
||||||
|
northern
|
||||||
|
levitating
|
||||||
|
arrow attraction
|
||||||
|
bat
|
||||||
|
manta ray
|
||||||
|
arachnida
|
||||||
|
drow
|
||||||
|
glamerous
|
||||||
|
free action
|
||||||
|
jumping
|
||||||
|
warmth
|
||||||
|
regeneration
|
||||||
|
annihilation
|
||||||
|
refridgeration
|
||||||
|
spherical
|
||||||
|
monkey
|
||||||
|
primal
|
||||||
|
psychic
|
||||||
|
woodlands
|
||||||
|
sharpness
|
||||||
|
smiting
|
||||||
|
bane of arthropods
|
||||||
|
fear
|
||||||
|
web
|
||||||
|
plane shift
|
||||||
|
winged
|
||||||
|
sun
|
||||||
|
son
|
||||||
|
spellguard
|
||||||
|
gaseous form
|
||||||
|
gaseous
|
||||||
|
valhalla
|
||||||
|
horned
|
||||||
|
golden lion
|
||||||
|
purple
|
||||||
|
enlargement
|
||||||
|
shrinking
|
||||||
|
slaying
|
||||||
|
tricky
|
||||||
|
awakened
|
||||||
|
unsheathed
|
||||||
|
prime
|
||||||
|
mystical
|
||||||
|
gleaming
|
||||||
|
enchanted
|
||||||
|
cursed
|
||||||
|
ancient
|
||||||
|
radiant
|
||||||
|
shadowy
|
||||||
|
whispering
|
||||||
|
ornate
|
||||||
|
runed
|
||||||
|
ethereal
|
||||||
|
intricate
|
||||||
|
glowing
|
||||||
|
forgotten
|
||||||
|
dreadful
|
||||||
|
celestial
|
||||||
|
fiery
|
||||||
|
frozen
|
||||||
|
arcane
|
||||||
|
serrated
|
||||||
|
ebon
|
||||||
|
gilded
|
||||||
|
luminous
|
||||||
|
sacrificial
|
||||||
|
arcane
|
||||||
|
malevolent
|
||||||
|
resplendent
|
||||||
|
vorpal
|
||||||
|
vengeful
|
||||||
|
vibrant
|
||||||
|
timeless
|
||||||
|
abyssal
|
||||||
|
otherworldly
|
||||||
|
necrotic
|
||||||
|
transcendent
|
||||||
|
perfected
|
||||||
|
empyreal
|
||||||
|
crimson
|
||||||
|
iridescent
|
||||||
|
eldritch
|
||||||
|
corrupted
|
||||||
|
thunderous
|
||||||
|
prismatic
|
||||||
|
harmonious
|
||||||
|
molten
|
||||||
|
umbral
|
||||||
|
blighted
|
||||||
|
harbinger
|
||||||
|
fey
|
||||||
|
pristine
|
||||||
|
titanic
|
||||||
|
ethereal
|
||||||
|
phantom
|
||||||
|
penumbral
|
||||||
|
verdant
|
||||||
|
infernal"""
|
||||||
|
|
||||||
|
#basesList = bases.split("\n")
|
||||||
|
#print(basesList)
|
||||||
|
enchantmentsList = enchantments.split("\n")
|
||||||
|
#print(enchantmentsList)
|
||||||
|
|
||||||
|
magicItemList = []
|
||||||
|
|
||||||
|
def makeItem(baseString = bases):
|
||||||
|
base = getBase(baseString.split("\n"))
|
||||||
|
enchantment = getEnchantment()
|
||||||
|
magicItem = ""
|
||||||
|
roll = random.randint(0,20) #rolls to see if it's
|
||||||
|
if roll < 10: #[ENCHANTMENT] [BASE] (10/21)
|
||||||
|
magicItem += enchantment+" "+base
|
||||||
|
elif roll == 20:#[ENCHANTMENT] [BASE] of [ENCHANTMENT 2] (1/21)
|
||||||
|
enchantment2 = getEnchantment()
|
||||||
|
magicItem += enchantment+" "+base+" of "+enchantment2
|
||||||
|
else: #or [BASE] of [ENCHANTMENT] (10/21)
|
||||||
|
magicItem += base+" of "+enchantment
|
||||||
|
return magicItem
|
||||||
|
|
||||||
|
def getEnchantment():
|
||||||
|
return enchantmentsList[random.randint(0,len(enchantmentsList)-1)]
|
||||||
|
|
||||||
|
def getBase(ls):
|
||||||
|
return ls[random.randint(0,len(ls)-1)]
|
21
keep_alive.py
Normal file
21
keep_alive.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
from flask import Flask
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
app = Flask('')
|
||||||
|
|
||||||
|
header = "None"
|
||||||
|
body = "The next thing generated will show here!"
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def home():
|
||||||
|
return f"""<h1>Latest - {header}</h1>
|
||||||
|
|
||||||
|
{body}
|
||||||
|
"""
|
||||||
|
|
||||||
|
def run():
|
||||||
|
app.run(host='0.0.0.0',port=8080)
|
||||||
|
|
||||||
|
def keep_alive():
|
||||||
|
t = Thread(target=run)
|
||||||
|
t.start()
|
22
license.txt
Normal file
22
license.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
For the contents of itemname.py
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Michaelofthepi
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
180
main.py
Normal file
180
main.py
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
import discord
|
||||||
|
import generate
|
||||||
|
import neural
|
||||||
|
import itemname
|
||||||
|
import random
|
||||||
|
import re
|
||||||
|
from discord import app_commands
|
||||||
|
from discord.ext import tasks
|
||||||
|
import keep_alive
|
||||||
|
from keep_alive import keep_alive
|
||||||
|
|
||||||
|
client = discord.Client(intents=discord.Intents.all())
|
||||||
|
tree = app_commands.CommandTree(client)
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
|
||||||
|
guildID = 1081397933276155977
|
||||||
|
magicForum = 1144040531240964256
|
||||||
|
raceForum = 1144075835217825868
|
||||||
|
subclassForum = 1144075898870579290
|
||||||
|
locationForum = 1144075950749925457
|
||||||
|
monsterForum = 1144081512724176947
|
||||||
|
npcForum = 1144425240018034878
|
||||||
|
otherForum = 1144426051720724602
|
||||||
|
botID = 1144041248303366314
|
||||||
|
logChannel = 1144064721922834582
|
||||||
|
|
||||||
|
@client.event
|
||||||
|
async def on_message(message):
|
||||||
|
if message.author != client.user:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@client.event
|
||||||
|
async def on_thread_create(thread):
|
||||||
|
# await thread.send("## Sample Concept Art Being Generated")
|
||||||
|
await neural.Generate(f"art of the '{thread.name}', a form of {thread.parent.name}",thread)
|
||||||
|
|
||||||
|
@tree.command(name = "magicitem", description = "Generate a new magic item!", guild=discord.Object(id=guildID))
|
||||||
|
async def magicitem(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["magic item", name,desc + ", and Give detailed rules for item effects and flavor accordingly. Keep non-artifact, non-legendary magic items simple.", magicForum, interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "race", description = "Generate a new race!", guild=discord.Object(id=guildID))
|
||||||
|
async def race(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["race", name,desc, , interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "subclass", description = "Generate a new subclass!", guild=discord.Object(id=guildID))
|
||||||
|
async def subclass(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["subclass", name,desc, , interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "location", description = "Generate a new location!", guild=discord.Object(id=guildID))
|
||||||
|
async def location(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["location", name,desc+", and Describe the location in detail. Provide key locations and any necessary information on NPCs.", locationForum, interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "monster", description = "Generate a new monster!", guild=discord.Object(id=guildID))
|
||||||
|
async def monster(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["living being", name,desc + ", and Give adequate description to both the flavoring of the monster AND the stat block.", monsterForum, interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "npc", description = "Generate a new npc!", guild=discord.Object(id=guildID))
|
||||||
|
async def npc(interaction, name:str, desc: str = ""):
|
||||||
|
queue.append(["NPC", name,desc + ". Provide a stat block for the NPC, but also include a bond, ideal, personality trait, and flaw. Offer a potential quest involving the NPC.", , interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "other", description = "Generate a new npc!", guild=discord.Object(id=guildID))
|
||||||
|
async def other(interaction, name:str, type:str = "spell", desc: str = ""):
|
||||||
|
queue.append([type, name,f"Be sure to follow all rules surrounding the {type}.", 1144426051720724602, interaction.user.id])
|
||||||
|
embedVar = discord.Embed(title=f'Queue position: {len(queue)}', description=f"It won't be long until we get around to the '{name}'!", color=0xffff00)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "ask", description = "Use in a thread to get more details!", guild=discord.Object(id=guildID))
|
||||||
|
async def ask(interaction, question:str):
|
||||||
|
if interaction.channel.type == discord.ChannelType.public_thread or interaction.channel.type == discord.ChannelType.forum:
|
||||||
|
embedVar = discord.Embed(title=f'Reply inbound', description=f"Question: {question}", color=0xffffff)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
#The important code
|
||||||
|
ctx = ""
|
||||||
|
async for message in interaction.channel.history(limit=100,oldest_first=True):
|
||||||
|
if str(message.author.id) == str(botID):
|
||||||
|
ctx += message.content
|
||||||
|
await interaction.channel.send(await generate.GetText(f"You are being asked a question about a piece of DND 5E content. The piece of content is: \n{ctx} \n\nThe question is: {question}. Answer the question thoroughly, but keep it less than 200 words. You do not need to restate any of the content's material nor that this is for DND 5E."))
|
||||||
|
else :
|
||||||
|
embedVar = discord.Embed(title=f'Invalid location', description=f"Do this inside of a forum post for context-specific results!", color=0xff0000)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
|
||||||
|
@tree.command(name = "conceptart", description = "Generate concept art!", guild=discord.Object(id=guildID))
|
||||||
|
async def conceptart(interaction, prompt:str):
|
||||||
|
embedVar = discord.Embed(title=f'Art inbound!', description=f"Prompt: '{prompt}'", color=0xffffff)
|
||||||
|
await interaction.response.send_message(embed=embedVar)
|
||||||
|
await neural.Generate(f"{prompt}", interaction.channel)
|
||||||
|
|
||||||
|
intervals = 0
|
||||||
|
alreadyGenerating = False
|
||||||
|
|
||||||
|
async def AddAutoGen(amount):
|
||||||
|
if amount > 10:
|
||||||
|
return
|
||||||
|
for i in range(amount):
|
||||||
|
v = random.choice([0,1,2,3 ])
|
||||||
|
if v == 0:
|
||||||
|
queue.append(["magic item", itemname.makeItem().title(),"Give detailed rules for item effects and mechanics.", magicForum, -1])
|
||||||
|
elif v == 1:
|
||||||
|
queue.append(["living being", itemname.makeItem(itemname.creatures).title(),"Give adequate description to both the flavoring of the monster AND the stat block.", monsterForum, -1])
|
||||||
|
elif v == 2:
|
||||||
|
queue.append(["location", itemname.makeItem(itemname.locations).title(),"Describe the location in detail. Provide key locations and any necessary information on NPCs.", locationForum, -1])
|
||||||
|
elif v == 3:
|
||||||
|
queue.append(["spell", itemname.makeItem(itemname.spells).title(),"Be sure to follow all rules surrounding the spell.", otherForum, -1])
|
||||||
|
|
||||||
|
@tasks.loop(minutes=0.25)
|
||||||
|
async def FlushQueue():
|
||||||
|
global alreadyGenerating
|
||||||
|
global intervals
|
||||||
|
try:
|
||||||
|
if alreadyGenerating:
|
||||||
|
return
|
||||||
|
alreadyGenerating = True
|
||||||
|
|
||||||
|
if len(queue) == 0:
|
||||||
|
intervals = (intervals+1)%10
|
||||||
|
if intervals == 0:
|
||||||
|
await AddAutoGen(1)
|
||||||
|
|
||||||
|
if len(queue) > 0:
|
||||||
|
obj = queue.pop(0)
|
||||||
|
keep_alive.header = obj[1]
|
||||||
|
obj[1] = re.sub('[^A-Za-z0-9 ]+', '', obj[1])
|
||||||
|
log = client.get_channel(logChannel)
|
||||||
|
await log.send(f"**Now generating the {obj[0]} '{obj[1]}'**")
|
||||||
|
channel = client.get_channel(obj[3])
|
||||||
|
st = f"Create a DND 5e {obj[0]} named the '{obj[1]}'. {obj[2]} Keep the final text under 300 words. Use markdown text formatting."
|
||||||
|
c = await generate.GetText(st)
|
||||||
|
keep_alive.body = c
|
||||||
|
if len(c) > 1900:
|
||||||
|
c2 = c[1899:(len(c)-1)]
|
||||||
|
c = c[0:1899]
|
||||||
|
thread = await channel.create_thread(name = obj[1], content = c + " (Truncated)")
|
||||||
|
await thread.thread.send(c2)
|
||||||
|
if (obj[4]!=-1):
|
||||||
|
await thread.thread.send("<@" + str(obj[4]) + ">")
|
||||||
|
else:
|
||||||
|
await thread.thread.send("Autogenerated by the bot")
|
||||||
|
else:
|
||||||
|
thread = await channel.create_thread(name = obj[1], content = c)
|
||||||
|
if (obj[4]!=-1):
|
||||||
|
await thread.thread.send("<@" + str(obj[4]) + ">")
|
||||||
|
else:
|
||||||
|
await thread.thread.send("Autogenerated by the bot")
|
||||||
|
|
||||||
|
alreadyGenerating = False
|
||||||
|
except Exception as e:
|
||||||
|
|
||||||
|
log = client.get_channel(logChannel)
|
||||||
|
await log.send("I'm just as confused as you are, there was an error somehow! The next time it should work though.")
|
||||||
|
await log.send("Error message: " + str(e))
|
||||||
|
alreadyGenerating = False
|
||||||
|
|
||||||
|
@client.event
|
||||||
|
async def on_ready():
|
||||||
|
print("I'm in")
|
||||||
|
print(client.user)
|
||||||
|
await tree.sync(guild=discord.Object(id=guildID))
|
||||||
|
log = client.get_channel(logChannel)
|
||||||
|
await log.send("Bot now online")
|
||||||
|
FlushQueue.start()
|
||||||
|
|
||||||
|
keep_alive()
|
||||||
|
|
||||||
|
my_secret = os.environ['discordbot']
|
||||||
|
client.run(my_secret)
|
86
neural.py
Normal file
86
neural.py
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
import asyncio
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from io import BytesIO
|
||||||
|
from PIL import Image
|
||||||
|
import discord
|
||||||
|
|
||||||
|
def create_image(links):
|
||||||
|
|
||||||
|
images=[]
|
||||||
|
for index in links:
|
||||||
|
response = requests.get(index)
|
||||||
|
images.append(Image.open(BytesIO(response.content)))
|
||||||
|
image = Image.new("RGB", (images[0].width*len(images), images[0].height))
|
||||||
|
i=0
|
||||||
|
for img in images:
|
||||||
|
image.paste(images[i], (images[i].width*i, 0))
|
||||||
|
i+=1
|
||||||
|
return image
|
||||||
|
|
||||||
|
async def Generate(prompt, channel, count=2, negativePrompt = "",size="square"):
|
||||||
|
url = "https://api.neural.love/v1/ai-art/generate"
|
||||||
|
payload = {
|
||||||
|
"amount": count,
|
||||||
|
"isPublic": True,
|
||||||
|
"isPriority": False,
|
||||||
|
"isHd": False,
|
||||||
|
"steps": 25,
|
||||||
|
"cfgScale": 7.5,
|
||||||
|
"prompt": prompt,
|
||||||
|
"style": "anything",
|
||||||
|
"layout": size,
|
||||||
|
"negativePrompt": negativePrompt
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"accept":
|
||||||
|
"application/json",
|
||||||
|
"content-type":
|
||||||
|
"application/json",
|
||||||
|
"authorization":
|
||||||
|
os.environ['neural']
|
||||||
|
}
|
||||||
|
response = requests.post(url, json=payload, headers=headers)
|
||||||
|
data = response.json()
|
||||||
|
|
||||||
|
if not "orderId" in data.keys():
|
||||||
|
await channel.send("**Error while generating, try again?**")
|
||||||
|
return
|
||||||
|
orderId = data["orderId"]
|
||||||
|
print(orderId)
|
||||||
|
url2 = "https://api.neural.love/v1/ai-art/orders/" + orderId
|
||||||
|
print(url2)
|
||||||
|
headers2 = {
|
||||||
|
"accept":
|
||||||
|
"application/json",
|
||||||
|
"authorization":
|
||||||
|
os.environ['neural']
|
||||||
|
}
|
||||||
|
count = 0
|
||||||
|
while True:
|
||||||
|
await asyncio.sleep(3)
|
||||||
|
response2 = requests.get(url2, headers=headers2)
|
||||||
|
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
data2 = response2.json()
|
||||||
|
if data2["status"]["isReady"]:
|
||||||
|
links = []
|
||||||
|
for i in range(data2["input"]["amount"]):
|
||||||
|
data3 = data2["output"][i]
|
||||||
|
links.append(data3["full"])
|
||||||
|
with BytesIO() as image_binary:
|
||||||
|
create_image(links).save(image_binary, 'PNG')
|
||||||
|
image_binary.seek(0)
|
||||||
|
await channel.send(file=discord.File(fp=image_binary, filename='image.png'))
|
||||||
|
break
|
||||||
|
elif data2["status"]["code"] == 998:
|
||||||
|
await channel.send("All results were NSFW, aborting!")
|
||||||
|
break
|
||||||
|
elif count > 10:
|
||||||
|
await channel.send("Taking too long, aborting!")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
#await message.channel.send("Not done, waiting 10 seconds to retry..."
|
||||||
|
|
||||||
|
await asyncio.sleep(7)
|
Loading…
Reference in a new issue