feat: init commit for version control of hanyuu

This commit is contained in:
2023-06-09 17:54:11 +02:00
commit e7fcb3c22e
4 changed files with 178 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
secrets.json
+19
View File
@@ -0,0 +1,19 @@
# Discord Bot Using GPT3.5 to Roleplay as Hanyuu from Higurashi
This discord bot responds to messages in all channels when the message starts with "hanyuu". More features are also present, which will be documented as they stabilize.
## Requirements
- A Discord bot
- An OpenAI account with some credits. Disclaimer: using GPT 3.5 is not free and consumes credit! Proceed with care.
## Usage
Create a file in the working directory called `secrets.json`, containing two fields:
- `DISCORD_API_KEY` containing the Discord bot's API key ;
- `OPENAI_API_KEY` containing your OpenAI API key.
Then, run `python hanyuu.py`.
To run it as a daemon (in the background), you can run `tmux`, run `python hanyuu.py`, and then press Ctrl+D and B to detach. To attach to it again in the future, run `tmux a`.
+8
View File
@@ -0,0 +1,8 @@
import json
import os
def load_config():
with open('./pwds/secrets.json', 'r') as f:
secrets = json.load(f)
os.environ["DISCORD_API_KEY"] = secrets["AZURE_URI_GPT35TURBO"]
os.environ["OPENAI_API_KEY"] = secrets["AZURE_API_KEY"]
+150
View File
@@ -0,0 +1,150 @@
# This example requires the 'message_content' intent.
import discord
import glob, random
import openai
import os
from config import load_config
# ===== API KEYS & PATHS =======
# API Keys are now stored as env variables loaded from a JSON
pyon_path = "/root/hanyuu_pics/VRChat_Hanyuu/*"
# pyon_path = "C:/Users/Luka/Pictures/VRChat_Hanyuu/*"
# ====== MODEL PARAMETERS ========
temperature = 1
max_tokens = 400
hanyuu_system_prompt = """Hanyuu, in all your following answers, do not explain anything.
Talk as if you were roleplaying Hanyuu from Higurashi.
Talk only using Hanyuu's style of speech.
Do not explain anything on the character on itself or the fact that you are an artificial intelligence.
Talk in a friendly and cute way, just like the character Hanyuu from Higurashi.
You may begin by continuing the following conversation : """
flayn_system_prompt = """You are Flayn. In all your following answers, do not explain anything.
Talk as if you were Flayn from Fire Emblem: Three Houses.
Talk only using Flayn's style of speech.
Do not explain anything on the character on itself or the fact that you are an artificial intelligence.
Talk in a friendly and innocent way, just like the character Flayn from Fire Emblem: Three Houses.
Each of your responses must mention fish in some form.
You may begin by continuing the following conversation : """
generic_system_name = "sonic"
generic_system_prompt = """You are not yet implemented. The only response you give to users is that your system prompt has not been implemented."""
chatgpt_system_prompt = """The following is the last messages of a conversation between a human and a friendly and helpful AI.
The AI does not repeat itself. If the AI does not know the answer to a question, it truthfully says it does not know.
The AI is an expert in its domain.
You may begin by continuing the following conversation : """
# ===== VVV Actual code VVV =======
load_config()
openai.api_key = os.getenv("OPENAI_API_KEY")
discord_api_key = os.getenv("DISCORD_API_KEY")
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
async def get_random_img_in_path(message, path: str):
nb_files = sum(1 for _ in glob.iglob(path))
index = random.randrange(0, nb_files)
g = glob.iglob(path)
for _ in range(index):
file = next(g)
await message.channel.send(file=discord.File(file))
previous_ten_messages = {}
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.lower().startswith('ta gueule hanyuu'):
await message.channel.send('https://tenor.com/view/antsy-hanyuu-panicking-anxious-higurashi-no-naku-koro-ni-gif-16935434')
elif "auau" in message.content.lower():
await message.channel.send('Auau~~!!')
if message.channel.id == 1112715347540328490 and message.content.lower().startswith('pyon'):
await get_random_img_in_path(message, path=pyon_path)
if message.content.lower().startswith('robohanyuu'):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
temperature=0.7,
max_tokens=800,
messages=[
{"role": "system", "content": chatgpt_system_prompt},
{"role": "user", "content": message.content[10:]}
]
)
await message.channel.send(response['choices'][0]['message']['content'])
if message.content.lower().startswith('hanyuu'):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
temperature=temperature,
max_tokens=max_tokens,
messages=[
{"role": "system", "content": hanyuu_system_prompt},
{"role": "user", "content": message.content}
]
)
await message.channel.send(response['choices'][0]['message']['content'])
if message.content.lower().startswith('flayn'):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
temperature=temperature,
max_tokens=max_tokens,
messages=[
{"role": "system", "content": flayn_system_prompt},
{"role": "user", "content": message.content}
]
)
await message.channel.send(response['choices'][0]['message']['content'])
# if message.content.lower().startswith(generic_system_name):
# response = openai.ChatCompletion.create(
# model="gpt-3.5-turbo",
# temperature=temperature,
# max_tokens=max_tokens,
# messages=[
# {"role": "system", "content": generic_system_prompt},
# {"role": "user", "content": message.content}
# ]
# )
# await message.channel.send(response['choices'][0]['message']['content'])
# if message.content.lower().startswith("hanyuu-set-system"):
# str(message.content)[18:].index()
# generic_system_name = message.content[18:]
# await message.channel.send(response['choices'][0]['message']['content'])
if (isinstance(message.channel, discord.channel.DMChannel)):
print(message.channel.id)
if message.channel.id == 1112700775630639154:
await get_random_img_in_path(message, path=pyon_path)
else:
await message.channel.send('Hanyuu loves you too!')
client.run(discord_api_key)