Compare commits
7 Commits
602db1bbf2
...
jonbot
| Author | SHA1 | Date | |
|---|---|---|---|
| 122239e306 | |||
| 39cc53d501 | |||
| 4de0347610 | |||
| e94173b3da | |||
| f64eb45f1b | |||
| 1cee01c1c8 | |||
| 3afb2e5132 |
@@ -22,7 +22,6 @@ jobs:
|
|||||||
if [ "$(docker compose ps -q)" ]; then
|
if [ "$(docker compose ps -q)" ]; then
|
||||||
docker compose down
|
docker compose down
|
||||||
fi
|
fi
|
||||||
docker build -t git.crate.zip/crate/garfbot:latest .
|
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
else
|
else
|
||||||
docker restart garfbot
|
docker restart garfbot
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- ../garfbot:/usr/src/app
|
- /home/crate/garfbot:/usr/src/app
|
||||||
|
|
||||||
jonbot:
|
jonbot:
|
||||||
image: git.crate.zip/crate/jonbot:latest
|
image: git.crate.zip/crate/jonbot:latest
|
||||||
@@ -17,4 +17,4 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
restart: always
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- ../garfbot/jonbot:/usr/src/app
|
- /home/crate/garfbot/jonbot:/usr/src/app
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import config
|
import config
|
||||||
import openai
|
import openai
|
||||||
|
from openai import AsyncOpenAI
|
||||||
import discord
|
import discord
|
||||||
|
from discord.ext import commands
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from logging.handlers import TimedRotatingFileHandler
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
from openai import AsyncOpenAI
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("garflog")
|
logger = logging.getLogger("garflog")
|
||||||
@@ -32,59 +33,67 @@ if not logger.hasHandlers():
|
|||||||
|
|
||||||
openai.api_key = config.OPENAI_TOKEN
|
openai.api_key = config.OPENAI_TOKEN
|
||||||
jonkey = config.JONBOT_TOKEN
|
jonkey = config.JONBOT_TOKEN
|
||||||
model = config.TXT_MODEL
|
txtmodel = config.TXT_MODEL
|
||||||
|
sysprompt = config.SYSTEM_PROMPT
|
||||||
|
|
||||||
intents = discord.Intents.default()
|
intents = discord.Intents.default()
|
||||||
intents.messages = True
|
intents.messages = True
|
||||||
intents.message_content = True
|
intents.message_content = True
|
||||||
client = discord.Client(intents=intents)
|
|
||||||
|
|
||||||
|
client = commands.Bot(
|
||||||
|
command_prefix=["Jonbot ", "jonbot ", "Jon", "jon"],
|
||||||
|
case_insensitive=True,
|
||||||
|
intents=intents,
|
||||||
|
)
|
||||||
|
|
||||||
@client.event
|
@client.event
|
||||||
async def on_ready():
|
async def on_ready():
|
||||||
print(f"Logged in as {client.user.name} running {model}.", flush=True)
|
print(f"Logged in as {client.user.name} running {txtmodel}.", flush=True)
|
||||||
|
|
||||||
|
@client.command(name="chat")
|
||||||
|
async def jonchat(ctx, *, prompt):
|
||||||
|
if "is this true" in prompt.lower():
|
||||||
|
messages = [msg async for msg in ctx.channel.history(limit=2)]
|
||||||
|
prompt = messages[1].content
|
||||||
|
prompt = f"Is this true: {prompt}"
|
||||||
|
answer = await generate_chat(prompt)
|
||||||
|
logger.info(
|
||||||
|
f"Chat Request - User: {ctx.author.name}, Server: {ctx.guild.name}, Prompt: {prompt}"
|
||||||
|
)
|
||||||
|
await ctx.reply(answer)
|
||||||
|
|
||||||
@client.event
|
@client.event
|
||||||
async def on_message(message):
|
async def on_message(message):
|
||||||
if message.author == client.user:
|
if message.author == client.user:
|
||||||
return
|
return
|
||||||
if message.content.lower().startswith("hey jon") or isinstance(message.channel, discord.DMChannel):
|
|
||||||
question = message.content[7:] if message.content.lower().startswith("hey jon") else message.content
|
content = message.content.strip()
|
||||||
try:
|
lower = content.lower()
|
||||||
response = openai.ChatCompletion.create(
|
if lower.startswith("hey jon") or isinstance(
|
||||||
model=model,
|
message.channel, discord.DMChannel
|
||||||
messages=[
|
):
|
||||||
{"role": "system", "content": "Pretend you are friendly Jon Arbuckle."},
|
ctx = await client.get_context(message)
|
||||||
{"role": "user", "content": f"{question}"}
|
await jonchat(ctx, prompt=content)
|
||||||
],
|
|
||||||
max_tokens=400
|
|
||||||
)
|
|
||||||
answer = response['choices'][0]['message']['content']
|
|
||||||
answer = answer.replace("AI language model", "American citizen")
|
|
||||||
answer = answer.replace("language model AI", "citizen of the United States")
|
|
||||||
await message.channel.send(answer)
|
|
||||||
except Exception as e:
|
|
||||||
e = str(e)
|
|
||||||
await message.channel.send(f"`JonBot Error: {e}`")
|
|
||||||
|
|
||||||
oai = AsyncOpenAI(
|
oai = AsyncOpenAI(
|
||||||
api_key=config.OPENAI_TOKEN,
|
api_key=config.OPENAI_TOKEN,
|
||||||
base_url=config.BASE_URL,
|
base_url=config.BASE_URL,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def generate_chat(self, question: str) -> str:
|
async def generate_chat(question: str) -> str:
|
||||||
try:
|
try:
|
||||||
response = await oai.chat.completions.create(
|
response = await oai.chat.completions.create(
|
||||||
model=self.txtmodel,
|
model=txtmodel,
|
||||||
messages=[
|
messages=[
|
||||||
{"role": "system", "content": self.sysprompt},
|
{"role": "system", "content": sysprompt},
|
||||||
{"role": "user", "content": question},
|
{"role": "user", "content": question},
|
||||||
],
|
],
|
||||||
max_tokens=400,
|
max_tokens=400,
|
||||||
temperature=1.2,
|
temperature=1.2,
|
||||||
)
|
)
|
||||||
answer = response.choices[0].message.content
|
answer = response.choices[0].message.content
|
||||||
return answer.replace("an AI language model", "a cartoon animal")
|
return answer
|
||||||
except openai.BadRequestError as e:
|
except openai.BadRequestError as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
return f"`JonBot Error: {e}`"
|
return f"`JonBot Error: {e}`"
|
||||||
|
|||||||
Reference in New Issue
Block a user