alfreda/main.py

107 lines
4.2 KiB
Python

import discord
import anthropic
from dotenv import load_dotenv
import os
# The following are used for debugging purposes, remove if you like
import time
release = "stable-0.1.1"
load_dotenv()
# Give your bot a name and a personality!
idName = os.getenv('NAME')
identity = os.getenv('IDENTITY')
# Use this variable to allow certain things that may be blocked. Useful for making coding assistants, writing assistants etc
allowedTopics = os.getenv('ALLOWED_TOPICS')
# Add your bot's response word here (set up an @mention one by mentioning your bot, then copying text and pasting it in the variable)
wakeWord = os.getenv('WAKE_WORD')
# Impose reasonable restrictions, delete these with caution!
restrictions = os.getenv('RESTRICTIONS')
intents = discord.Intents.default()
intents.message_content = True
aiclient = anthropic.Anthropic(
# Put your Anthropic API key here. Get yours at https://console.anthropic.com/settings/keys
api_key = os.getenv('ANTHROPIC_KEY'),
)
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print("Logged in as ", client.user)
@client.event
async def on_message(message):
if message.author == client.user:
return
if (wakeWord + " debug") in message.content:
start = time.process_time()
await message.reply(idName + " is currently on release " + release)
aimessage = aiclient.messages.create(
model="claude-3-haiku-20240307",
max_tokens=250,
temperature=0.5,
system=identity,
messages=[
{
"role": "user",
"content": "Can you introduce yourself?",
}
]
)
await message.reply(aimessage.content)
end = time.process_time()
totalTime = end - start
await message.reply("Took about " + str(totalTime * 100) + " seconds to send message to Discord")
return
if wakeWord in message.content:
print(message.content)
print("Generating Anthropic message...")
aimessage = aiclient.messages.create(
# Change the model here
model="claude-3-haiku-20240307",
# Get longer or shorter responses
max_tokens=250,
# Change how creative the bot is
temperature=0.5,
# Change the personality with the variables above
system=identity,
messages=[
{
"role": "user",
"content": message.content,
}
]
)
print(aimessage)
# Verify that your bot might have realistically said that
aiverification = aiclient.messages.create(
model="claude-3-haiku-20240307",
max_tokens=50,
temperature=0.0,
system=("Do you think " + idName + " sent the following message? Respond with only True or False, don't say anything else." + identity + allowedTopics + "If any of the following rules are broken, return False: " + restrictions),
messages=[
{
"role": "user",
"content": aimessage.content
}
]
)
print(aiverification.content)
if str(aiverification.content) == "[TextBlock(text='True', type='text')]":
print("Raw recieved content:", aimessage.content)
print("Unfluffing...")
untreated = str(aimessage.content)
treatment1 = untreated.replace('[TextBlock(text="', '')
treatment2 = treatment1.replace('"', '')
treatment3 = treatment2.replace(", type='text')]", '')
treatment4 = treatment3.replace("\n", "")
print("Fluff removed. Sending...")
print(treatment4)
await message.reply(treatment4)
else:
print("Message not related to ", idName, ". Sending notification...")
await message.reply("Hmmm, doesn't look like " + idName + " really wants to respond to this one")
# Put your Discord bot token here. Make a Discord bot at https://discord.dev
client.run(os.getenv('DISCORD_TOKEN'))