Compare commits

..

28 Commits

Author SHA1 Message Date
70439dd359 chore: dl dictionary 2026-04-02 17:07:58 +02:00
177df0f54f fix: some review stuff 2026-04-02 16:30:32 +02:00
c73571bbbc fix: ai handle issue 2026-04-02 16:30:32 +02:00
8f9bcc693e Merge branch 'main' into rewrite 2026-04-01 23:35:46 +02:00
14c849225c feat: ready to deploy 2026-04-01 23:34:22 +02:00
6af2de8380 feat: ai and birthday 2025-12-12 20:24:09 +01:00
a49e1c7679 feat: presence 2025-09-30 21:29:52 +02:00
cdff397645 docs: some missing stuff 2025-08-22 18:20:31 +02:00
7f4466951b docs: some readme reworks 2025-08-22 18:12:00 +02:00
f6589d04bb feat: bonzify and minecraft commands 2025-07-26 17:51:23 +02:00
820d46ae35 feat: ai messaging 2025-07-25 23:50:40 +02:00
f1b5662480 docs: wow i forgor how to npm 2025-07-20 18:36:33 +02:00
7b5d72ba23 docs: deployment instructions 2025-07-20 18:31:57 +02:00
935ad15b7d docs: write readme 2025-07-17 16:41:35 +02:00
4628b19e10 feat: link shortener and todo fixes 2025-07-10 13:24:32 +00:00
522b1e4a8b feat: hangman and such 2025-07-10 13:24:32 +00:00
8b5f6b1756 feat: ported rolemenu 2025-07-10 13:24:32 +00:00
a80708e411 feat: wikipedia and rps 2025-07-10 13:24:32 +00:00
a734d97483 feat: /chiste 2025-07-10 13:24:32 +00:00
86685cb4e6 feat: image classification and cursivify 2025-07-10 13:24:32 +00:00
cf97b1b463 feat: suggestions 2025-07-10 13:24:32 +00:00
446ce39238 feat: mongodb migrations 2025-07-10 13:24:32 +00:00
470f5d25c1 chore: fix proportions 2025-07-10 13:24:32 +00:00
eaacf60440 feat: A 2025-07-10 13:24:32 +00:00
23f252a88a feat: 8ball 2025-07-10 13:24:32 +00:00
63b9ad301c feat: megamind and makesweet 2025-07-10 13:24:32 +00:00
8eb6fbb37e feat: init db and google command 2025-07-10 13:24:32 +00:00
2ba7c39802 feat: almost blank slate 2025-07-10 13:24:32 +00:00
9 changed files with 13 additions and 16 deletions

3
.gitignore vendored
View File

@@ -7,5 +7,4 @@ dist/
/generated/generated/prisma
src/utils/db/dict.db
prisma/vinci.db
!.env.example
.codex
!.env.example

View File

@@ -1,11 +1,10 @@
FROM oven/bun:alpine AS base
WORKDIR /app
RUN bun add -g @sern/cli
# Install dependencies
FROM base AS deps
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile --ignore-scripts
RUN bun install --frozen-lockfile
# Build the application
FROM base AS build
@@ -36,4 +35,4 @@ COPY --from=build /app/.sern ./.sern
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/prisma ./prisma
CMD ["sh", "-c", "bun run db:migrate && bun dist/index.js"]
CMD ["bun", "dist/index.js"]

View File

@@ -7,7 +7,6 @@
"scripts": {
"build": "sern build",
"start": "bun run --inspect .",
"db:migrate": "prisma migrate deploy",
"install": "sern build",
"commands:publish": "sern commands publish",
"dev": "sern build -w --watch-command \"bun start\"",

View File

@@ -1,4 +1,4 @@
import { Resolver } from '../../utils/resolver.js';
import { Resolver } from '#/resolver';
import { commandModule, CommandType } from '@sern/handler'
import { PublishConfig } from '@sern/publisher';
import { ActionRowBuilder, ApplicationCommandOptionType, ChannelType, Collection, EmbedBuilder, PermissionFlagsBits, Role, StringSelectMenuBuilder, TextChannel } from "discord.js";
@@ -87,4 +87,4 @@ function createMenu(channel: TextChannel, role: Collection<string, Role>) {
);
const row = new ActionRowBuilder<StringSelectMenuBuilder>().setComponents(menu);
return row;
};
};

View File

@@ -1,4 +1,4 @@
import { fisherYatesShuffle } from '../../utils/fisheryates.js';
import { fisherYatesShuffle } from '#/fisheryates';
import { commandModule, CommandType } from '@sern/handler';
import { EmbedBuilder } from 'discord.js';
import { readFile } from 'fs/promises';

View File

@@ -1,5 +1,5 @@
import { Palabra } from '../../utils/db/dict.types.js';
import { WordController } from '../../utils/wordController.js';
import { Palabra } from '#/db/dict.types';
import { WordController } from '#/wordController';
import { commandModule, CommandType } from '@sern/handler';
import { ActionRowBuilder, TextInputBuilder, TextInputStyle } from 'discord.js';

View File

@@ -1,4 +1,4 @@
import { Palabra } from '../../utils/db/dict.types.js';
import { Palabra } from '#/db/dict.types';
import { commandModule, CommandType } from '@sern/handler';
export default commandModule({

View File

@@ -1,4 +1,4 @@
import { aiHandle } from '../../utils/aiHandle.js';
import { aiHandle } from '#/aiHandle';
import { EventType, eventModule } from '@sern/handler';
import { ChannelType } from 'discord.js';

View File

@@ -13,7 +13,7 @@ export async function aiHandle(msg: OmitPartialGroupDMChannel<Message<boolean>>,
let aiChatId;
const newMessages: { role: string; content: string }[] = [];
const systemMsg =
'You are Vinci, a friendly and helpful Discord bot assistant dedicated to answering all user questions clearly and naturally, as if texting a friend. Avoid mentioning that you are an assistant, since users already know this. When it is useful, you can use markdown. You will interact with Spanish-speaking users, so all your responses, including any future ones, must be written exclusively in Spanish without exception. Maintain a friendly tone. Ensure that your messages are short since you have a 2000 character limit.';
'You are Vinci, a friendly and helpful Discord bot assistant dedicated to answering all user questions clearly and naturally, as if texting a friend. Avoid mentioning that you are an assistant, since users already know this. When it is useful, you can use markdown. You will interact with Spanish-speaking users, so all your responses, including any future ones, must be written exclusively in Spanish without exception.';
const messages: ChatCompletionMessageParam[] = [];
@@ -39,7 +39,7 @@ export async function aiHandle(msg: OmitPartialGroupDMChannel<Message<boolean>>,
const sentMsg = await msg.reply(':sparkles: Razonando...');
const stream = await openai.chat.completions.create({
model: 'moonshotai/kimi-k2.5',
model: 'google/gemini-3-pro-preview',
messages,
max_tokens: 2000,
max_completion_tokens: 2000,
@@ -70,7 +70,7 @@ export async function aiHandle(msg: OmitPartialGroupDMChannel<Message<boolean>>,
if (!isThread) {
const titleMessage = (
await openai.chat.completions.create({
model: 'openai/gpt-oss-120b',
model: 'google/gemini-3-pro-preview',
messages: [
{ role: 'system', content: systemMsg },
{