4 Commits

Author SHA1 Message Date
122239e306 Merge branch 'main' into jonbot 2026-06-19 06:13:43 +00:00
39cc53d501 jonbot fixes 2026-06-19 01:12:46 -05:00
4de0347610 Merge pull request 'jonbot' (#13) from jonbot into main
All checks were successful
Garfbot CI/CD Deployment / Deploy (push) Successful in 1m17s
Reviewed-on: #13
2026-06-19 06:05:00 +00:00
e94173b3da fix jon chats and merge main into branch 2026-06-18 15:22:20 -05:00
3 changed files with 37 additions and 29 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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}`"